이번엔 Jenkins를 사용해서 이미지를 빌드 및 푸시를 해보도록 하겠습니다.
우선 Jenkins를 설치해줍니다.
Jenkins 설치
저는 docker-compose를 사용해서 설치를 했기 때문에 docker compose부터 설치 해보도록 하겠습니다.
참고
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
https://docs.docker.com/compose/install/linux/
먼저 Docker 부터 설치를 해줍니다. (OS는 Ubuntu 20.04를 사용하였습니다.)
# apt install -y docker.io
그리고 docker compose를 설치하는데, 하기 전에 apt repository부터 잡아줍니다.
공식 GPG key 추가
# apt-get update
# apt-get install ca-certificates curl
# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
# chmod a+r /etc/apt/keyrings/docker.asc
apt 패키지 매니저가 사용할 repository 추가
# echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt-get update
이제 docker-compose-plugin을 설치해줍니다.
# apt-get update
# apt-get install docker-compose-plugin
이렇게 되면 docker compose를 사용할 준비가 완료되었습니다.
이제 Jenkins를 설치해보도록 하겠습니다.
docker-compose.yml
version: '3.9' services: jenkins: image: 'jenkins/jenkins:lts' container_name: jenkins restart: always user: root ports: # 호스트Port:컨테이너Port - 80:8080 - 50000:50000 volumes: # 호스트Path:컨테이너Path - /data/jenkins_home:/var/jenkins_home - /data/daemon.json:/etc/docker/daemon.json - /var/run/docker.sock:/var/run/docker.sock
위의 yaml 파일에서 몇가지만 설명을 하자면,
- Jenkins가 실행되게되면 컨테이너 안의 /var/jenkins_home 디렉터리에 데이터가 쌓이기 때문에, 호스트Path를 지정해서 볼륨을 잡아준다.
- daemon.json 파일에는 docker login, pull 을 할 때, insecure-registry를 해주기 위해 넣어준다.
daemon.json 파일의 내용 { "insecure-registries":["harbor의 도메인 주소","harbor 서버의 IP"] }
이제 docker-compose.yml 파일을 실행해준다.
# docker compose up -d
그러면 아래와 같이 초기 비밀번호를 넣어주고
Install suggested plugins을 설치해준다.
그 후 계정을 생성해주고 로그인을 해주면 된다.
Pipeline 사용하기 위한 설정 준비
먼저 필요한 plugin을 설치해줍니다.
Jenkins 관리 > Plugins > Available plugins에서 Docker Pipeline 플러그인을 설치해줍니다.
그리고 Pipeline item을 생성을 합니다.
Github에서 Private Repository를 생성하고 token을 받아주는 과정은 아래를 참고하여 보시면 됩니다.
2024.05.03 - [Git] - GitHup Private Repository에 파일 올리기
token을 받아주면 Jenkins에서 credential를 생성해줍니다.
Jenkins 관리 > Credentials > add Credential
그 후 Pipeline 구성에서 Pipeline script from SCM으로 변경해줍니다.
Pipeline 구성
그리고 Pipeline 코드를 작성한 파일의 이름을 Jenkinsfile로 지정해줍니다.
Jenkins 컨테이너 안에 docker 설치
Pipeline 코드를 작성하고 빌드를 할 때, docker 명령어를 사용하는데, Jenkins 컨테이너 안에
docker 데몬이 없으면 docker: not found 오류가 나옵니다.
따라서 저는 Jenkins 컨테이너 안에 docker를 설치를 해주었습니다.
docker 설치
먼저 jenkins 컨테이너 접속 # docker exec -it jenkins /bin/bash docker 데몬 설치 # curl https://get.docker.com/ > dockerinstall && chmod 777 dockerinstall && ./dockerinstall
Pipeline 코드 작성
이제 Pipeline 코드를 작성하여 위에서 생성한 github repository에 Jenkinsfile 이라는 이름으로 필요한 파일들과 함께 올려주면 됩니다.
Jenkinsfile
pipeline { agent any environment { DOCKER_REGISTRY = "<harbor 주소>" DOCKER_IMAGE = "<harbor에 올릴 이미지 이름>" DOCKER_CREDENTIALS_ID = "<harbor 로그인 할 때 필요한 credential>" } stages { stage('Build') { steps { script { // Build Docker image docker.build "${DOCKER_IMAGE}:v${env.BUILD_NUMBER}" } } } stage('Push') { steps { script { // Login to Harbor registry docker.withRegistry("${DOCKER_REGISTRY}", "${DOCKER_CREDENTIALS_ID}") { // Push the Docker image docker.image("${DOCKER_IMAGE}:v${env.BUILD_NUMBER}").push("v${env.BUILD_NUMBER}") } } } } } }
이런 저런 오류들을 해결하다보니 저는 16번의 빌드 끝에 성공하였습니다.
이상 입니다.
'Pipeline' 카테고리의 다른 글
Github Action 이란 ? (0) | 2024.12.19 |
---|---|
주먹구구식 Gradle 빌드/배포 자동화 (Gitlab-runner, ArgoCD) (1) | 2024.08.13 |
Gitlab-runner 사용해서 Gradle 빌드 해보기 (0) | 2024.07.25 |
Gitlab runner 사용해서 CI 해보기 (1) | 2024.06.14 |
Helm을 사용하여 Jenkins 설치해보기 (1) | 2024.04.19 |