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

4.2. Console 에서 빌드

어떨 때 쓰는가

  • 소스 코드를 컨테이너 이미지로 만들고 싶은데 Dockerfile 을 쓰고 싶지 않을 때
  • 화면에서 빌드를 실행하고 결과를 바로 배포까지 하고 싶을 때
  • 간단한 애플리케이션이라 Jenkins 파이프라인까지 필요하지 않을 때

되풀이 실행이나 배포 승인 절차가 필요하면 Jenkins 를 쓰십시오(4.4 장).

빌드 설정과 빌드의 관계

두 가지를 구분해야 합니다.

이름무엇인가실체
빌드 설정(BuildConfig)"무엇을 어떻게 빌드할지" 를 담은 재사용 템플릿클러스터에 저장되는 설정 자원
빌드(Build)그 설정으로 한 번 실행한 것클러스터에서 도는 작업(Job)

빌드 설정을 한 번 만들어 두면, 소스가 바뀔 때마다 빌드 시작 버튼만 누르면 됩니다. 실행할 때마다 새 빌드가 생기고 이력으로 쌓입니다.

빌드 설정 자체는 아무 일도 하지 않습니다. 저장만 되어 있다가 실행할 때 그 내용대로 작업이 만들어집니다.

빌드 설정 목록

빌드 > 빌드 설정 으로 들어갑니다.

빌드 설정 목록
설명
이름빌드 설정 이름
Git 주소소스를 가져올 저장소
빌더 이미지컴파일을 담당할 이미지
결과 이미지만들어질 이미지 이름
경과 시간만든 뒤 지난 시간

목록이 비어 있으면 안내 문구와 함께 빌드 설정 만들기 버튼이 나옵니다. 처음 쓰는 화면이라 여기서 시작하면 됩니다.

빌드 기능이 설치되지 않은 클러스터에서는 목록 대신 안내 배너가 뜹니다. 운영 담당자에게 빌드 기능 설치를 요청하십시오.

빌드 설정 만들기 — 네 가지 탭

목록 오른쪽 위의 생성 을 누르면 탭이 네 개 있는 창이 열립니다.

설명언제 씁니다
가이드 편집빌드 설정 전용 입력 서식기본값. 대부분 이것으로 충분합니다
YAML 편집설정을 YAML 로 직접 입력다른 설정을 복사해 올 때
폼 편집모든 항목을 자동 생성된 서식으로가이드 편집에 없는 항목이 필요할 때
API 문서각 항목의 설명항목의 뜻이 궁금할 때

가이드 편집에서는 Secret·볼륨·빌더 이미지를 드롭다운으로 고릅니다. 이름을 직접 적지 않아도 되므로 오타로 실패하는 일이 줄어듭니다.

가이드 편집 입력 항목

항목설명예시
이름빌드 설정 이름. 네임스페이스 안에서 겹치지 않아야 합니다egov-build
네임스페이스빌드를 실행하고 결과를 둘 곳egov
Git 주소소스가 있는 저장소http://gitlab.../egov.git
브랜치·태그가져올 지점. 비우면 기본 브랜치main
하위 디렉터리저장소 안에서 빌드할 경로backend
소스 인증 정보비공개 저장소에 쓸 Secretgitlab-cred
빌더 이미지언어·빌드 도구에 맞는 이미지드롭다운에서 선택
빌더 인증 정보빌더 이미지를 가져올 Secretharbor-cred
빌드 환경 변수컴파일 중에 쓸 값MAVEN_ARGS, MAVEN_MIRROR_URL
결과 이미지만들어질 이미지 주소harbor.../egov:latest
푸시 인증 정보레지스트리에 올릴 때 쓸 Secretharbor-cred
태그 방식아래 "이미지 태그 규칙" 참고GitRef

빌더 이미지 목록에는 클러스터에 등록된 것만 나옵니다. Java, Node.js, Python 등 자주 쓰는 언어가 준비되어 있습니다. 필요한 빌더가 없으면 운영 담당자에게 등록을 요청하거나 Jenkins· Bastion 경로를 쓰십시오(4.4·4.5 장).

결과 이미지 주소는 기본값이 채워집니다. 클러스터에 기본 레지스트리가 설정되어 있으면 <레지스트리>/apps/... 형태로 미리 들어가며, ... 부분만 바꾸면 됩니다.

내부 라이브러리 저장소(Nexus)를 쓰는 환경에서는 MAVEN_MIRROR_URL 환경 변수를 넣어야 의존 라이브러리를 받을 수 있습니다. 폐쇄망에서는 외부 저장소에 연결되지 않습니다.

이미지 태그 규칙

결과 이미지에 적은 태그는 기준값 이고, 실제 태그는 태그 방식이 정합니다.

태그 방식만들어지는 태그특징
GitRef (기본)<브랜치>-<커밋해시 7자리>어느 소스로 만들었는지 태그만 봐도 압니다
Unique<시각>-<임의 4자리>실행할 때마다 반드시 달라집니다

두 방식 모두 실행할 때마다 태그가 달라지므로 배포하면 확실히 새 버전이 뜹니다. 태그를 latest 로 고정하면 이미지 주소가 그대로라 배포해도 파드가 바뀌지 않는 문제가 생기는데, COP 는 이 방식으로 그것을 막습니다.

GitRef 는 같은 커밋을 다시 빌드하면 태그가 같습니다. 이때는 배포해도 롤아웃이 일어나지 않습니다. 소스를 고치지 않고 다시 배포해야 한다면 Unique 를 쓰십시오.

빌드 자원 설정

빌드는 클러스터 안에서 파드로 돕니다. 자원 요청량과 상한이 항상 채워집니다.

항목기본값
요청 CPU500m
요청 메모리1Gi
요청 임시 저장 공간4Gi
상한 CPU2
상한 메모리4Gi

기본값을 비워 두지 않는 이유가 있습니다. 자원 요청이 없는 파드는 가장 먼저 밀려나는 등급 (BestEffort)이 되어(3.1 장 참고) 빌드가 노드 메모리를 끝까지 쓰다가 다른 파드까지 함께 죽일 수 있습니다.

큰 프로젝트라 메모리가 모자라면 상한을 올리십시오. 반대로 상한이 네임스페이스 자원 한도를 넘으면 빌드가 시작되지 않습니다(8.1 장).

캐시로 빌드 시간 줄이기

Maven·Gradle 은 매번 라이브러리를 새로 받으면 빌드가 오래 걸립니다. 저장 공간(PVC)을 캐시 경로에 붙이면 다음 빌드부터 빨라집니다.

가이드 편집의 볼륨 항목에서 PVC 를 고르고 마운트 경로를 지정합니다.

빌드 도구캐시 경로
Maven/home/jboss/.m2 (빌더 이미지에 따라 다를 수 있습니다)
Gradle~/.gradle
npm~/.npm

PVC 는 먼저 만들어 두어야 목록에 나타납니다(6.1 장).

함께 만들어지는 것

빌드 설정을 만들면 배포 골격(Deployment)이 함께 만들어집니다. 복제본 수는 0 이라 파드는 뜨지 않습니다.

이렇게 하는 이유는, 이미지가 아직 없는 상태에서 파드를 띄우면 이미지를 못 가져와 ImagePullBackOff 오류가 계속 쌓이기 때문입니다. 첫 배포 때 0 에서 1 로 올라갑니다.

Service 는 이 시점에 만들지 않습니다. 어느 포트를 열지는 빌드가 끝나야 알 수 있습니다.

빌드 실행과 취소

빌드 설정 상세 화면에 버튼이 모여 있습니다.

버튼하는 일
빌드 시작지금 설정으로 새 빌드를 실행합니다
빌드 취소진행 중인 빌드를 중단합니다
재빌드진행 중인 것을 취소하고 새로 시작합니다
배포마지막 성공 빌드의 이미지를 배포합니다

같은 빌드 설정으로 두 빌드를 동시에 돌릴 수 없습니다. 진행 중이면 시작 버튼이 비활성으로 바뀝니다.

상세 화면 아래에는 이 설정으로 실행한 빌드 이력이 나옵니다. 이름·상태·시작 시각과 함께 어느 노드에서 돌았는지 표시되므로, 특정 노드에서만 실패한다면 여기서 알 수 있습니다.

빌드 이력은 기본 20건까지 남고 오래된 것부터 지워집니다.

배포

배포 버튼은 마지막으로 성공한 빌드의 이미지를 배포합니다.

동작은 이렇습니다.

상황동작
배포 대상이 이미 있음컨테이너 이미지를 바꿔 롤링 업데이트
배포 대상이 없음새로 만듭니다 (복제본 1)
복제본이 0 임이미지를 바꾸고 1 로 올립니다
이미지에 EXPOSE 포트가 있고 Service 가 없음ClusterIP Service 를 한 번만 만듭니다

이미지를 바꿀 때는 확인 창이 뜨고 바뀌기 전 이미지와 바뀔 이미지 를 함께 보여 줍니다. 태그가 어떻게 달라지는지 확인하고 진행하십시오.

이미 배포된 이미지면 배포 버튼이 비활성입니다. 같은 이미지를 다시 배포해도 아무것도 바뀌지 않기 때문입니다. 다만 복제본이 0 이면 켜는 동작이 필요하므로 활성으로 남습니다.

기존 Service 는 절대 덮어쓰지 않습니다. 포트를 바꾸려면 Service 를 직접 고치십시오(5.1 장).

실패할 때 확인할 것

증상원인조치
소스를 가져오지 못함저장소 주소·브랜치가 틀림, 비공개 저장소 인증 정보 없음주소·브랜치 확인, 소스 인증 Secret 지정
컴파일 실패소스 자체의 오류, 의존 라이브러리를 받지 못함빌드 로그의 오류 줄, MAVEN_MIRROR_URL 확인
이미지 올리기 실패(UNAUTHORIZED)레지스트리 인증 정보가 없거나 권한이 모자람푸시 Secret 의 계정·비밀번호와 해당 프로젝트 권한 확인
인증서 오류사설 인증서 레지스트리빌드 설정의 안전하지 않은 연결 허용 항목 확인
빌드가 시작되지 않음빌드용 자원이 모자람네임스페이스 자원 한도 확인(8.1 장)
메모리 부족으로 중단빌드에 필요한 메모리가 상한보다 큼빌드 자원 상한을 올립니다
배포했는데 파드가 안 바뀜같은 커밋을 GitRef 로 재빌드해 태그가 같음소스를 고치거나 태그 방식을 Unique 로

인증 정보가 등록되어 있어도 값이나 권한이 틀리면 올리기 단계에서 실패합니다. Secret 이 존재하는지만 보지 말고 내용까지 확인하십시오(3.4 장).