설치 환경

  • NHN Cloud
  • Ubuntu 20.04
  • Docker 23.0.1
  • Jenkins 공식 이미지



Workflow

  1. Ubuntu 인스턴스에 Docker 설치
  2. Jenkins 컨테이너 설치
  3. NHN Cloud 보안그룹에 8080 수신 포트 추가
  4. public IP:8080 으로 Jenkins 접속
  5. Jenkins 설정
    • 관리자 패스워드 등록
    • 플러그인 설치
    • 유저 설정
    • Jenkins 접속 URL 설정
  6. Jenkins 웹 접속

 

1. Ubuntu 인스턴스에 Docker 설치

아래 글을 참고하세요!

[🚦 인프라/🐳 Docker] - Ubuntu에 Docker 설치하기

 

Ubuntu에 Docker 설치하기

설치 환경 NHN Cloud Ubuntu 20.04 Docker 23.0.1 Ubuntu 인스턴스에 Docker 설치 🐳 Docker Docs 참고 1. apt package index 업데이트 및 apt가 HTTPS를 통해 저장소를 사용할 수 있도록 패키지를 설치합니다. sudo apt-get upd

myminju.tistory.com

 

2. Jenkins 컨테이너 설치

sudo docker run -d --name jenkins -p 8080:8080 jenkins/jenkins
  • -d: 컨테이너를 데몬으로 띄운다.
  • --name: 컨테이너의 이름을 jenkins로 설정한다
  • -p 8080:8080: 컨테이너의 외부와 통신할 포트(앞의 값)를 내부적으로 사용할 포트(뒤의 값)를 포워딩해준다.

 

3. NHN Cloud 보안그룹에 8080 수신 포트 추가

Jenkins를 8080 포트로 설치했기 때문에 통신할 수 있도록 보안그룹에 8080 포트를 추가하여 열어줍니다.

4. {public IP}:8080 으로 Jenkins 접속

앞의 과정을 모두 수행했다면 젠킨스 설치가 완료된 것입니다!

젠킨스 웹에 접근해보겠습니다. 젠킨스에 접근하려면 {public IP}:8080 주소를 웹에 입력하면 됩니다.
접속하면 아래와 같은 화면이 뜹니다.

 

5. Jenkins 설정

  • 패스워드 등록

초기 접속을 위해 관리자 패스워드 등록 과정이 필요합니다.

해당 키를 확인하기 위해서 젠킨스가 설치된 인스턴스에 접속해 아래의 명령어를 입력합니다.

// jenkins 컨테이너에 접속
$ sudo docker exec -it jenkins bash
// 초기 관리자 키 확인
$ cat /var/jenkins_home/secrets/initialAdminPassword

 

  • 플러그인 설치

키를 잘 입력하면 아래와 같이 젠킨스 초기 플러그인 설정이 나옵니다.
추천 플러그인 설정으로 선택합니다.

 

플러그인들이 하나씩 설치됩니다.

 

  • 유저 설정

플러그인 설치가 끝났다면 유저 설정을 합니다.

 

  • Jenkins 접속 URL 설정

젠킨스에 접속할 때 사용할 URL 설정입니다.
기본 설정 public IP:8080으로 유지하고 넘어갑니다.

 

  • 완료

젠킨스의 설치가 완료되었습니다!

 

6. Jenkins 웹 접속

설정한 URL와 유저 정보로 접속하면 아래와 같은 화면이 나옵니다.
GUI 화면을 통해 젠킨스를 이용할 수 있습니다.

✅ 공식문서

https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2939987647631384419

 

📍 목차

  1. 과제 내용
  2. 프로세스
  3. 주요 명령어
  4. 코드
  5. 결과

 

과제 내용

  • 특정 두레이 프로젝트에 일일 스크럼 태스크를 자동 등록해주는 프로그램 작성
    • 일일 태스크 생성: [2023/01/10 (화) 일일 스크럼] 등 일일 스크럼 태스크를 1주일 전 매일 자동 생성
    • 주간 태스크 생성: 2023/01/10(화) 데이터운영팀 주간 업무 회의 의 주간 회의 태스크는 다음주 회의 태스크 자동 생성

 

프로세스

개발환경

  • macOS Monterey
  • intel 7i / x86_64

 

도식화

  • 상위 업무가 있는지 확인
    • 없으면 연 또는 월 단위의 상위 업무 생성
  • 해당 일에 업무가 있는지 확인 (수동으로 등록된 것이 있는지 확인 차원)
    • 없으면 가장 최근에 등록된 일일 업무가 있는지 확인
      • 있다면 가장 최근 일일 업무 상태-완료/만기일-미정 설정
  • 하위 업무 생성
  • 젠킨스에서 설정한 두레이 대화방에 메시지 알림

 

세부사항

  • 상위 업무에 하위 업무로 등록됨
  • 태그 : 지정한 태그명
  • 날짜 : 생성될 때 일주일 후 날짜로 자동 생성됨
  • 담당자 : 본인 (그룹으로도 가능)
  • 실행 : 젠킨스 사용
    • 일일 스크럼 : 평일 9시마다 빌드
    • 주간업무회의 : 화요일 9시마다 빌드

 

주요 명령어

curl

  • 프로토콜을 이용해 URL로 데이터를 전송해서 서버에 데이터를 보내거나 가져올 때 사용하는 명령어
  • Shell에서 REST API(http) 테스트를 하고 싶을 때 사용
  • 지원하는 프로토콜 : http / https / ftp / ldap / scp / telnet / smtp / pop3 등
  • Linux/mac OS : 기본 탑재
  • 사용한 옵션
    • -d : http POST 요청 데이터 입력
    • -s : 진행 내용이나 메시지 출력 안되게
    • -X : 요청시 사용할 메소드 종류
    • -H : 전송할 헤더 지정



date

  • 날짜 및 시간을 다양한 포맷으로 출력하고, 계산할 때 사용하는 명령어
  • macOS에서 사용하기
    • macOS는 date 명령어에 -d 옵션이 적용되지 않음
    • 포맷 : -v[-(과거)/+(미래)][일수]d
# 오늘로부터 7일 뒤 yyyy/mm/dd 형식
date -v+7d +%Y/%m/%d

# 오늘로부터 7일 뒤 요일 형식
date -v+7d +%A  # 수요일
date -v+7d +%a  # 수



jq

  • Shell에서 JSON을 조작할 수 있는 라이브러리
  • 사용한 옵션
    • -r : 결과값에 따옴표 제거해서 raw 값 받기
  • 설치
# macOS
brew install jq



crontab

  • Linux에서 일정 주기나 특정 시간에 명령을 실행하게 해주는 명령어 (스케줄러)
# crontab 작성
crontab -e

# crontab 작업 리스트 보기
crontab -l

# crontab 모든 작업 삭제
crontab -r

# 매주 일요일 23시 55분에 수행
55 23 * * 0 파일 저장된 위치 >> 로그 저장할 위치

# 매주 월-금요일 23시 55-59분에 수행
55-59 23 * * 1-5 파일 저장된 위치 >> 로그 저장할 위치

 

코드

  • 변수

 

  • 로직
  • 상위 업무 유무 확인
    • 없으면 상위 업무 생성

 

  • 하위 업무 유무 확인
    • 있으면 종료

 

  • 없으면 가장 최근 일일 업무 확인 후 상태-완료 및 만기일-미정 설정

 

  • 하위 업무 생성

 

결과

  • 성공 화면 (연 단위)
  • 성공 화면 (월 단위)

 

  • 이미 해당 일의 업무가 생성되어 있을 경우


고려한 사항

  1. 상위 업무가 연 또는 월 단위를 선택하여 생성될 수 있도록 구현
    → 연도나 월이 바뀌더라도 때마다 자동으로 상위 업무가 생성되어 수작업이 필요하지 않도록 구현
  2. 만기일(없음/미정/있음) 설정
    → 가장 최근의 업무를 업무상태를 완료로 바꿀 경우 : 만기일이 설정되어 캘린더에 나오게 됨
    → 업무를 생성하거나 변경할때 dueDateFlag: false 로 할 경우, 만기일이 없음 상태가 됨
    → 특이사항 1 : 업무상태(할일/진행중/완료) 속성을 사용할 수 없음
    → 특이사항 2 : dueDateFlag를 true로만 사용하기를 권장
  3. 크론탭만 사용했을 경우, 빌드가 실패한 경우에 재실행 등의 예외 처리가 쉽지 않음
    → 젠킨스에서 두레이와 연동된 플러그인을 사용해 빌드 실패시 재시도 횟수를 설정하여 다시 빌드되도록 설정
  4. 빌드 결과를 두레이 메시지 알림
    → 두레이 대화방 단위로 메시지 가능

 

보완이 필요한 사항

  1. 상위 업무 생성시 하위 업무가 바로 등록되지 않는 점
    → 동시성 문제인가 싶어 wait를 걸어봤는데 되지 않아서 좀 더 확인 필요
  2. 상위 업무를 생성해야 하는 경우, 태그도 함께 생성될 수 있도록 (현재는 태그가 만들어져 있다고 가정되어 있음)
    → 'application/x-www-form-urlencoded' not supported 에러 확인 필요
  3. 젠킨스봇 메시지 내용 설정이 가능한지 확인
    → 플러그인에서 지원하지 않는 것 같지만 좀 더 확인 필요

+ Recent posts