Jenkins
를 docker container
로 생성한 다음 Jenkins
에서 docker build
, docker push
를 할 일이 있어서 가이드를 만들었다.
최종 결과는 위의 그럼과 같다. 간단히 설명하자면, 순서는 아래와 같다.
1. 사용자의 OS
에 docker daemon
을 설치/실행
한다.
2. docker cli
를 포함하는 Jenkins 이미지
를 container
로 띄운다. 이 때에 Host OS
의 docker.sock
를 Mount
하여 docker cli
가 Host OS
의 docker daemon
에 접근할 수 있도록 한다.
3. Jenkins
로 docker build
, docker push
를 한다.
자신의 컴퓨터에 도커를 설치한다. 각자의 OS 에 맞게 설치한다.
Linux 가 아닐 경우 Docker Desktop
를 통해 설치하자.
나는 Ubuntu
여서 다음의 방법으로 설치했다.
# 1. 시스템 업데이트
$ sudo apt-get update
# 2. Docker 패키지 설치를 위한 필수 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# 3. Docker 공식 GPG 키 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 4. Docker 저장소 추가
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 패키지 목록 업데이트
$ sudo apt-get update
# 6. Docker 설치
$ sudo apt-get install docker-ce
# 7. Docker 서비스 상태 확인
$ sudo systemctl status docker
# 8. Docker 명령어를 root 없이 사용하도록 설정
$ sudo usermod -aG docker ${USER}
# 9. 다음 명령어로 새 세션을 시작
$ newgrp docker
# 10. docker 정상적으로 동작하는 지 확인
$ docker ps
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
아래의 docker-compose.yaml
을 복사하여 원하는 경로
에 저장한다.
# docker-compose.yaml
version: '3.8'
services:
jenkins:
image: sororiri/jenkins:0.0.1
container_name: jenkins-server
user: root
restart: always
ports:
- "8080:8080"
- "50000:50000"
volumes:
- ./jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
참고로
sororiri/jenkins:0.0.1
Dockerfile
은 다음과 같다.
docker-cli
를 젠킨스 이미지 안에 추가함을 통해 별도로 젠킨스가 실행한 뒤에Docker-cli
를 설치하지 않아도 되게 하였다.# Dockerfile FROM jenkins/jenkins:lts USER root RUN apt-get update && apt-get install -y lsb-release RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \ https://download.docker.com/linux/debian/gpg RUN echo "deb [arch=$(dpkg --print-architecture) \ signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \ https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list #---- docker-ce-cli RUN apt-get update && apt-get install -y docker-ce-cli #---- sshpass RUN apt-get -y install sshpass #---- locale RUN apt-get install -y locales git \ && localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 USER jenkins
Jenkins Image
를 Docker
로 실행한다.
# docker-compose.yaml 을 저장한 위치로 이동한 뒤 파일을 확인한다.
$ ls
> docker-compose.yaml
# docker 실행
$ docker compose up
> WARN[0000] /home/sori/temp/jenkins/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/0
✔ Container jenkins-server Recreated 0.1s
Attaching to jenkins-server
Jenkins
초기화 시 다음과 같은 로그가 남는데, 여기에 초기 비밀번호
가 있다.
jenkins-server | Please use the following password to proceed to installation:
jenkins-server |
jenkins-server | a475e502f16a4a4cba1c6898311b3d5a <= 이게 초기 비번임 ~!
jenkins-server |
jenkins-server | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
표시되는 비밀번호를 복사한 후, http://localhost:8080
로 접속한다.
그럼 아래와 같은 페이지가 나오는데, 여기에 초기 비밀번호를 입력한다.
그러면 아래와 같은 페이지가 나오는데, 잘 모르겠으면 그냥 Install suggested plugin
으로 진행하면 된다.
이후 아래 페이지도 기입한 뒤에 save and continue
를 클릭한다.
다음의 페이지에도 기본값
으로 되어있는 것으로 두고 Save and Finish
를 클릭한다.
Jenkins
에서 Docker 실행하기아래처럼 New Item
클릭한다.
원하는 이름으로 Job 이름을 설정하고 Freestyle project
로 Job
을 만든다.
그리고 아래와 같이 Execute shell
을 클릭한다.
이후 아래처럼 docker ps
를 입력 후 Save
버튼을 클릭 해 Job
을 생성한다.
그 다음 Build Now
로 Job
을 실행해본다.
이후 실행 결과를 보면 아래와 같이 docker cli
가 정상적으로 HOST 의docker-daemon
에 접속한 것을 확인할 수 있다.
$ docker ps
명령어가 적용되었다면 이제 docker
로그인을 진행해보자. 로그인, 비밀번호는 외부에 노출되면 안되므로 아래처럼 credentials
에 추가한다.
DockerHub
의 USERNAME(ID)
와 PASSWORD
를 credentials
에 추가한다. creadentials ID
는 임의로 정하면 된다.
우선 아래와 같이 Job 을 새로 생성한다.
그리고 Job 설정을 아래와 같이 변경해보자.
관련 소스코드는 아래와 같다.
pipeline {
agent any
environment {
dockerhub_cred = credentials('DockerHub-sororiri')
}
stages {
stage('Hello') {
steps {
sh '''
echo $dockerhub_cred_PSW | docker login -u $dockerhub_cred_USR --password-stdin
'''
}
}
}
}
이후 Job
을 실행해보면 아래와 같이 Login 이 정상적으로 동작하는 것을 확인할 수 있다.
궁금하신 점이 있으면 말씀해주세요.