본문으로 건너뛰기
버전: 1.0.3

4.4. Jenkins 로 빌드·배포

어떨 때 쓰는가

  • 빌드와 배포를 하나로 묶어 실행할 때
  • 실행 이력과 승인 절차가 필요할 때
  • Blue-Green 이나 롤백처럼 정해진 배포 방식을 쓸 때
  • 새 애플리케이션의 빌드·배포 구성을 한 번에 만들 때

Jenkins 란

여러 단계를 순서대로 실행하고 그 이력을 남기는 도구 입니다. 빌드 자동화 서버라고도 부릅니다.

Jenkins 에서 하나의 작업 단위를 Job 이라고 합니다. Job 을 실행하면 정해진 단계가 차례로 돌고, 실행할 때마다 번호가 붙어 기록이 남습니다.

Console 빌드와 무엇이 다른가

Console (4.2 장)Jenkins
다루는 범위빌드 → 배포빌드 → 배포 → 검증 → 알림까지
실행 조건버튼을 눌렀을 때버튼, 시각, 소스 변경 등
승인 단계없습니다넣을 수 있습니다
배포 방식롤링 업데이트Blue-Green, 카나리 등
이력빌드별로 남습니다Job 실행별로 남고 오래 보관합니다
준비화면에서 바로Job 을 미리 만들어 둡니다

둘 다 결과는 같은 이미지입니다. 절차가 단순하면 Console 이 빠르고, 절차가 정해져 있고 되풀이한다면 Jenkins 가 낫습니다.

Jenkins 접속

브라우저에서 Jenkins 주소를 엽니다. 주소는 설치 담당자에게 확인하거나 Console 의 도구 메뉴에서 이동합니다(9.3 장).

Console 과 같은 통합 인증을 쓰므로, Console 에 이미 로그인했다면 별도 입력 없이 들어갑니다.

Job 목록

접속하면 등록된 Job 목록이 나옵니다.

Jenkins Job 목록

전자정부 샘플용으로 미리 만들어 둔 Job 은 다음과 같습니다.

Job하는 일
00-NEW-PROJECT새 애플리케이션의 빌드·배포 Job 을 한 번에 만듭니다
10-egov-helm-installHelm 차트로 처음 설치합니다 (9.1 장)
20-egov-build소스를 S2I 로 빌드하고 이미지를 레지스트리에 올립니다
30-egov-deploy만든 이미지를 클러스터에 배포합니다
40-egov-rollback이전 버전으로 되돌립니다
50-egov-blue-greenBlue-Green 방식으로 전환합니다
60-egov-hpa자동 확장을 적용한 배포를 실행합니다 (3.5 장)
70-egov-argocd-deployArgoCD 를 거쳐 배포합니다
99-egov-helm-uninstall설치한 것을 지웁니다

앞의 번호는 실행 순서를 뜻합니다. 처음 설치할 때는 10 → 20 → 30 순으로 진행합니다.

각 줄의 왼쪽 표시는 마지막 실행 결과입니다. 초록 확인 표시는 성공, 빨강은 실패입니다. 오른쪽 끝의 실행 버튼을 누르면 곧바로 실행됩니다.

신규 프로젝트 만들기

새 애플리케이션을 추가할 때는 00-NEW-PROJECT Job 을 실행합니다.

신규 프로젝트 생성 화면

입력 항목은 다음과 같습니다.

항목설명예시
NAMESPACE배포할 네임스페이스. 없으면 새로 만듭니다egov
DEPLOYMENT애플리케이션 배포 이름homepage
GIT_URL빌드할 소스의 Git 저장소 주소http://gitlab.../app.git
BASE_IMAGES2I 빌드와 실행에 쓸 기반 이미지openjdk17, tomcat9
HOST외부 접속 주소homepage-egov.apps...
NEXUS_URL내부 라이브러리 저장소 주소http://nexus...:8081

빌드 도구는 Maven 과 Gradle 을 지원합니다.

실행하면 다음이 자동으로 만들어집니다.

구분만들어지는 것
KubernetesNamespace, Deployment, Service, Ingress
Jenkins그 애플리케이션 전용 빌드 Job, 배포 Job

한 번만 실행하면 됩니다. 이후로는 만들어진 빌드·배포 Job 을 씁니다.

만들어진 자원은 Console 의 토폴로지 화면에서 연결 관계를 확인할 수 있습니다(2.2 장).

빌드 Job 실행

20-egov-build 를 누르고 실행합니다.

빌드 Job 화면

실행하면 다음 순서로 진행됩니다.

  1. Git 저장소에서 소스를 최신으로 받습니다.
  2. S2I 로 컴파일하고 컨테이너 이미지를 만듭니다.
  3. 이미지를 레지스트리(Harbor)에 올립니다.

왼쪽 아래 빌드 기록 에서 실행 번호를 누르면 콘솔 출력(로그)을 볼 수 있습니다. 진행 중인 빌드는 실시간으로 이어집니다.

실패한 실행은 빨간 표시가 남습니다. 그 번호를 눌러 로그의 마지막 부분을 보십시오.

배포 Job 실행

빌드가 끝나면 30-egov-deploy 를 실행합니다.

배포 Job 화면

배포 Job 은 올라간 이미지를 클러스터의 Deployment 에 적용하고, 새 파드가 정상적으로 뜰 때까지 기다립니다. 파드가 뜨지 않으면 Job 도 실패로 끝나므로, 배포가 성공했는지 Job 결과만 보면 됩니다.

배포 방식 고르기

Job방식특징
30-egov-deploy롤링 업데이트하나씩 교체합니다. 기본
50-egov-blue-greenBlue-Green새 버전을 먼저 다 띄우고 트래픽을 한 번에 옮깁니다
70-egov-argocd-deployGitOpsGit 저장소의 정의를 기준으로 배포합니다

Blue-Green 은 전환 중에 서비스가 끊기지 않고, 문제가 생기면 즉시 되돌릴 수 있습니다. 대신 배포 중에 자원이 두 배 필요합니다.

배포 결과 확인

배포가 끝나면 Console 에서 확인합니다.

확인할 것어디에서
파드가 떴는지워크로드 > Pod (3.1 장)
복제본 수가 맞는지워크로드 > 배포 (3.2 장)
배포된 이미지 태그배포 상세의 컨테이너
외부 접속 주소네트워킹 > 인그레스 (5.1 장)
자원 연결 관계토폴로지 (2.2 장)

Ingress 에 표시된 주소를 브라우저에서 열어 애플리케이션이 응답하는지 확인하십시오.

되돌리기

되돌리는 방법이 두 가지입니다.

방법특징
40-egov-rollback JobJenkins 이력에 되돌린 기록이 남습니다
Console 의 배포 히스토리화면에서 리비전을 골라 되돌립니다 (3.2 장)

Jenkins 로 배포했다면 Jenkins 로 되돌리는 편이 좋습니다. 이력이 한곳에 모여 나중에 무슨 일이 있었는지 추적하기 쉽습니다.

급할 때는 Console 이 빠릅니다. 다만 Jenkins 이력에는 그 되돌림이 남지 않으므로, 나중에 Jenkins 로 다시 배포하면 되돌리기 전 상태로 돌아갈 수 있습니다.