::: IT인터넷 :::

Docker로 Scala 빌드머신 만들기 (3) - 빌드와 배포

곰탱이푸우 2023. 8. 17. 08:20
Scala 개발환경 구성이 완료되면 작성한 Application을 빌드하고 배포해야 한다.
이전에 Jenkins로 Python과 Docker 빌드/배포 환경을 구축한 방법을 활용하여 Scala Application의 빌드 머신을 생성한다.
Jenkins의 SSH Agent 컨테이너의 Dockerfile과 sbt를 활용하여 리눅스 기반의 Scala 빌드 에이전트를 생성한다.
생성한 빌드 에이전트는 SSH 통신을 이용하여 Jenkins에 에이전트로 등록한다.
 
진행 순서는 다음과 같다.
  • Jenkins SSH 에이전트 이미지 생성 Dockerfile 작성
  • Dockerfile 빌드에 필요한 외부 파일 다운로드와 폴더 구성
  • Jenkins 에이전트 이미지 빌드와 배포
 
Dockerfile 작성과 폴더 구성이 완료되었으므로, Docker 이미지를 빌드하고 배포한다.
Dockerfile 관련 폴더를 구성하는 방법은 아래 글을 참고한다.
Dockerfile 직성 방법은 아래 글을 참고한다.
Dockerfile을 작성하여 Docker로 빌드 할 것이므로 Docker가 설치되어 있어야 한다.
 
 

전체 파일 구성

Scala 빌드 머신의 전체 파일 구조는 크게 세 부분으로 구성된다.
  • Dockerfile - Docker 이미지 생성 스크립트
  • Jenkins 연동을 위한 에이전트
  • 빌드머신 구성에 필요한 환경 설정
 
빌드머신 구성에 필요한 환경 설정 파일들은 다음과 같이 구성된다.
  • apt 설정 - 우분투 apt 패키지 설정
  • sbt 설정 - sbt 실행에 필요한 설정
  • ssh 설정 - Jenkins 연동을 위한 ssh 관련 파일
  • 설치 파일 - 빌드 머신에 설치할 deb 파일
  • 테스트 파일 - 기본 라이브러리 다운로드를 위한 임시 build.sbt 파일
 
위와 같은 기준으로 정리한 전체 파일 구조는 다음과 같다.
각 항목별 설명은 주석을 참고한다.
\data
    \apt_conf\etc\apt
        \sources.list    # apt 저장소 설정
    \sbt_conf
        \etc\sbt
            \sbtopts    # sbt 설정 (저장소, 인증서 관련)
        \home\jenkins\
            \.sbt
                \credentials    # 배포 저장소 인증 정보
                \credentials.sbt    # 배포 저장소 인증 설정
                \nexus-url    # 배포할 sbt 저장소 목록
                \repositories    # sbt 저장소 목록
            \.ssh
                \authorized_keys    # 인증 정보 저장 파일
            \certs    # 자체서명인증서인 경우
                \output.cert    # 사설 저장소 서버 인증서
                \rootca.crt    # 사설 저장소 서버 rootca 인증서
            \test
                \build.sbt    # 기본 라이브러리 로드를 위한 build.sbt 예제
    \sbt_install\home\jenkins
        \sbt-1.9.0.deb    # sbt 1.9.0 설치 파일
Dockerfile    # Docker 이미지 빌드를 위한 Dockerfile
setup-sshd    # Jenkins Agent 연동을 위한 setup-sshd
version    # Docker 이미지 버전과 배포 정보
 
 

빌드와 배포

작성이 완료되면 해당 Dockerfile이 정상 동작하는지 테스트하고 형상 관리 시스템에 커밋한다.
 
Docker 이미지의 커밋 관련 내용은 아래 문서를 참고한다.

로컬 빌드 테스트

Dockerfile 작성과 내부 파일 구성이 완료되면 로컬에서 Docker 이미지를 생성해본다.
 
아래 명령을 수행한다.
# docker build --tag 생성할이미지명:버전 Dockerfile경로

$ docker build --tag sr-scala-agent:1.0.0-test .
 
정상적으로 빌드에 성공하면 아래와 같은 메시지가 출력된다.
Step 37/37 : ENTRYPOINT ["setup-sshd"]
---> Running in 8c8d712479bc
Removing intermediate container 8c8d712479bc
---> 1dbd74490315
Successfully built 1dbd74490315
Successfully tagged sr-scala-agent:1.0.0-test
$
 
Docker 이미지 목록을 출력해보면 아래와 같이 확인된다.
$ docker image list  # 또는 docker images
REPOSITORY               TAG                  IMAGE ID      CREATED        SIZE
sr-scala-agent           1.0.0-test           1dbd74490315  9 days ago     1.39GB
 
중간에 오류가 발생하는 경우 해당 오류 부분을 수정하고 위의 과정을 반복한다.
 
이러한 과정이 반복되면 빌드에 실패한 컨테이너와 이미지가 시스템에 남아있다.
아래 명령을 통해 깨끗하게 정리할 수 있다.
$ docker system prune

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
18260d42b7ab38e00100219a23d6d544871d4493c0ced194206f676a0459a0db
Deleted Images:
deleted: sha256:7e5bac196029c5d61eeb068bd9dd3c1b3369c2c10f8b8abf8996bf1b2cc41d3b
... 생략 ...
deleted: sha256:8df8ff3a39c3548d6b3dcf95758c6b3c225ba8030c6b82d949c0d92b5d162c67
Total reclaimed space: 1.014GB
 
위의 로그에 있는 것처럼 중지 된 컨테이너, 사용하지 않는 네트워크, 불필요한 이미지와 빌드 캐시를 모두 삭제한다.
일시로 중단시킨 컨테이너까지 모두 삭제될 수 있으므로, 별도의 테스트 환경에서 진행하는 것을 권장한다.
 
 

저장소에 커밋하기

테스트까지 완료되면 아래 내용을 참고하여 형상관리 시스템에 커밋한다.
 
Docker 이미지 빌드와 배포는 Jenkins에서 수행한다.
 

빌드하고 배포하기

Docker 이미지를 빌드하고 배포하는 환경 구성은 아래 포스팅을 참고한다.
작성한 Dockerfile의 빌드와 배포를 위한 파이프라인 작성은 아래 포스팅을 참고한다.

배포 결과 확인

빌드와 배포가 성공적으로 진행되면 아래와 같이 Docker 이미지가 정상적으로 업로드 된 것을 확인할 수 있다.