뉴아이템 생성할때 트리거를 설정한다.
젠킨스 컨테이너에서는 도커 호스트의 도커명령을 수행할 수 있어야 한다.
그래서 젠킨스 컨테이너 만들때 볼륨을
docker run \
--name jenkins_1 \
-p 8081:8080 \
-e TZ=Asia/Seoul \
-v /docker_projects/jenkins_1/var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /docker_projects/jenkins_1/data:/data \
-u root \
-d \
--restart unless-stopped \
jenkins/jenkins:lts
요렇게 해놨다.
도커 소켓으로 연결해뒀다.
젠킨스 컨테이너에서는 호스트의 도커명령을 수행할 수 있어야 한다.
jenkins_1 에서 도커설치하여, HOST OS의 도커명령어를 사용할 수 있도록 해보자
돌아가고있는 내 jenkins bash 접속
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
rm /etc/apt/keyrings/docker.gpg
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli docker-compose-plugin
exit
젠킨스 안에서 도커 명령어를 하면 도커호스트로 실행된다!
웹 훅 걸어주고
excute shell부분이 jenkins컨테이너에서 도커호스트로 보내는 명령어다.
소스코드 수정후 푸시
도커호스트에서 내용 확인
쉘에서 명령했던 abc까지 잘생성되었다.
이제 쉘에 도커이미지 빌드와 기존 도커 컨테이너 종료, 새도커이미지 실행만 써주면 내 사이트에 반영이된다.
#!/bin/bash
# deploy_1 컨테이너의 태그 확인
output=$(docker ps -a | fgrep deploy_release)
if [ -z "$output" ]; then
tag=0
else
tag=$(echo $output | awk '{print $2}' | cut -d ':' -f2)
fi
# 새로운 태그 계산
new_tag=$((tag + 1))
# 새 이미지 빌드
docker build -t hyojunkim/deploy:$new_tag .
# 기존 컨테이너가 있으면 삭제
if [ ! -z "$output" ]; then
docker rm -f deploy_release
fi
# 새 컨테이너 실행
docker run -p 8080:8080 -d --name deploy_release hyojunkim/deploy:$new_tag
# 이전 이미지가 있으면 삭제
if [ $tag -ne 0 ]; then
docker rmi hyojunkim/deploy:$tag
fi
[root@s18c739b9c25 workspace]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de0ec9eda7ad hyojunkim/deploy:2 "java -jar -Dspring.…" 28 seconds ago Up 28 seconds 0.0.0.0:8080->8080/tcp deploy_release
981816c0016c jc21/nginx-proxy-manager:latest "/init" 4 hours ago Up 4 hours 0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp nginx_proxy_manager_1-app-1
a9bcbed74e14 jenkins/jenkins:lts "/usr/bin/tini -- /u…" 22 hours ago Up 22 hours 50000/tcp, 0.0.0.0:8081->8080/tcp jenkins_1
786a8b9b01b4 mysql "docker-entrypoint.s…" 2 days ago Up 2 days 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_1
[root@s18c739b9c25 workspace]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyojunkim/deploy 2 414f0b8aff34 50 seconds ago 1.09GB
jenkins/jenkins lts 41e27c2a574b 8 days ago 486MB
mysql latest 380f0456d1c1 9 days ago 619MB
jc21/nginx-proxy-manager latest 61bf73b7d05b 4 weeks ago 843MB
무중단 배포 완성