Jenkins를 이용해 docker 이미지를 빌드하는 방법에 대해 알아봅니다.
0. Jenkins 및 docker 설치.
들어가기 앞서 jenkins와 docker를 미리 준비합니다.
- 2019.05.23 - [Programming/Linux] - [Ubuntu] Docker 설치하기
- 2020.01.17 - [Programming/Linux] - [Ubuntu] CI/CD를 위한 Jenkins 설치
1. Github 저장소 생성
가장 먼저 jenkins에서 빌드할 Github 저장소를 생성해 줍니다. 저장소에는 도커 이미지로 빌드할 때 사용될 dockerfile이 포함되어야 합니다.
Github 저장소는 다음을 참고해 주시기 바랍니다: JenkinsDockerPipeline
dockerfile은 설명할 내용이 없으며 Jenkinsfile은 뒤에서 설명하도록 하겠습니다.
2. 빌드 환경 구성.
Jenkins에서 Docker 이미지를 빌드하기 위해선 별도의 플러그인이 필요합니다. Jenkins 플러그인 설치 페이지로 이동 후 "Docker Pipeline" 플러그인을 설치합니다.
다음으론 Docker Registry의 인증 정보를 등록해 줄 차례입니다. Global Credential 페이지로 이동 후 Add Credentials를 클릭해 인증 정보를 등록합니다.
전 이전에 생성한 Harbor의 인증정보를 입력했습니다.
다음은 git을 이용하기 위한 설정입니다. 먼저 Jenkins가 설치된 서버에 git이 없다면 설치합니다.
$ sudo apt-get install git
그 후 git exe 경로를 확인합니다.
$ gut --exec-path
Jenkins의 Global tool configuration 페이지로 이동해 Git 항목을 확인한 경로로 수정해 줍니다.
다음은 도커 사용 권한입니다. 기본적으로 Jenkins에서 바로 docker.sock를 사용할 순 없습니다. 다음 명령어로 권한을 부여해 주세요.
$ sudo chmod 666 /var/run/docker.sock
3. Jenkins 아이템 생성
이제 Jenkins Pipeline을 사용해 실제 빌드를 진행해 보도록 하겠습니다. "새로운 Item"을 클릭해 "Pipeline"을 선택하고 새로운 아이템을 만듭니다.
저장소를 확인해 보셨다면 내부에 ${env.BUILD_NUMBER}를 확인할 수 있습니다. 이 값을 태그로 이용할 것이며 해당 값은 빌드할 때 함께 넘겨줍니다. 이를 위해 매개변수를 정의합니다.
다음은 파이프 라인 관련 설정입니다. 파이프라인 설정은 다음과 같이 설정하시면 됩니다.
"Pipeline script from SCM"을 선택한 뒤 SCM은 git을 고르고 리포지토리 주소를 입력하면 됩니다. 해당 리포지토리 내의 "Jenkinsfile"을 파이프라인 스크립트로 사용하겠다는 의미를 가집니다.
"Build with parameter"를 클릭해 BUILD_NUMBER를 입력한 뒤 빌드하면 파이프라인을 통해 빌드되는 것을 확인할 수 있습니다.
이제 Jenkinsfile을 확인해 봅시다.
node {
stage('========== Clone repository ==========') {
checkout scm
}
stage('========== Build image ==========') {
app = docker.build("jenkins-docker-pipeline/my-image")
}
stage('========== Push image ==========') {
docker.withRegistry('YOUR_REGISTRY', 'YOUR_CREDENTIAL') {
app.push("${env.BUILD_NUMBER}")
app.push("latest")
}
}
}
업로드된 Jenkinsfile은 Scripted pipeline을 위한 스크립트입니다. 다른 방식으로 Declarative pipeline을 위한 방식도 있으나 이 글에선 설명하지 않도록 하겠습니다.
파이프라인은 세 스테이지로 동작합니다.
1. SCM에서 소스코드를 체크아웃받습니다.
2. dockerfile을 이용해 "jenkins-docker-pipeline/my-image"라는 이름으로 이미지를 빌드합니다.
Jenkinsfile에서 push 할 때 이미지 태그를 설정하므로 여기선 이미지 이름만 설정합니다.
3. DockerRegistry에 Credential을 이용해 이미지를 push 합니다.
여기서 앞서 정의한 BUILD_NUMBER가 사용되며 자동으로 latest 태그의 이미지도 함께 push 됩니다.
예를 들어 BUILD_NUMBER에 0.0.1을 입력하고 빌드하면 jenkins-docker-pipeline/my-image:0.0.1과 jenkins-docker-pipeline/my-image:latest가 push 됩니다.
'Programming' 카테고리의 다른 글
Docker, NGINX, AWS ELB를 이용해 고가용성 Node.js 애플리케이션 빌드하기. (0) | 2021.05.08 |
---|---|
[NGINX] NGINX 컨닝 페이퍼 (0) | 2021.05.07 |
Fluentd + Elasticsearch + Kibana EFK Stack 구축하기 (0) | 2021.04.17 |
[Windows] WSL1 삭제하기. (0) | 2021.04.01 |
[SSL] Certbot을 이용한 인증서 갱신하기. (1) | 2021.02.09 |