Script 작성
Jenkins의 Item 설정 마지막 부분의 Build Steps에서 Add Build Step 클릭
Execute Shell을 선택해서 스크립트 창을 열어서 아래 스크립트를 테스트 해보면서 작성한다.
#!/bin/bash
# Gradlew 권한 부여
chmod 500 ./gradlew
# 빌드
./gradlew build
# 가동중인 Spring Boot 컨테이너 중 이름이 cosmic 인 컨테이너 중지 & 삭제
if docker ps -a --filter "name=cosmic" | grep -q cosmic; then
docker stop cosmic
docker rm cosmic
fi
# 기존 Spring Boot Image 중 이미지가 기존과 똑같은게 있으면 이미지 삭제
if docker images | awk '{print $1":"$2}' | grep -q "{ip}:5000/cosmic:1.0"; then
docker rmi -f {ip}:5000/cosmic:1.0
fi
# Docker Hub Login & 파라미터는 젠킨스에서 설정한 전역변수 사용
echo $PASSWORD | docker login -u $USERNAME --password-stdin
# 도커파일 빌드
docker build -t {ip}:5000/cosmic:1.0 -f ./deploy/cosmic .
# Container Registry에 이미지 Push
docker push {ip}:5000/cosmic:1.0
# Push한 이미지 삭제
docker rmi {ip}:5000/cosmic:1.0
# Container Registry에서 이미지 Pull
docker pull {ip}:5000/cosmic:1.0
# Docker Container 생성
docker run -d -v /root/logs:/logs --privileged --name cosmic -p 8080:8080 {ip}:5000/cosmic:1.0
# 사용하지 않는 불필요한 이미지 삭제 = 겹치는 이미지가 존재하면 이미지를 삭제한다 || true
dangling_images=$(docker images -f "dangling=true" -q)
if [[ -n "$dangling_images" ]]; then
docker rmi -f $dangling_images || true
fi
dangling Image
란?
동일한 태그를 가진 Docker Image가 빌드될 경우, 기존에 있는 이미지는 삭제되지도 않고,
tag가 none으로 변경된 상태로 남게 된다.
즉, 재 빌드시 이전 이미지를 삭제하고 새로운 이미지로 대체하겠다는 뜻이다.
Dockerfile 작성
Spring Boot의 최상단에 deploy 디렉터리를 생성하고 도커 파일을 작성한다.
FROM openjdk:11
VOLUME /logs
EXPOSE 8080
ARG JAR=Pipeline-CICD-0.0.1-SNAPSHOT.jar
COPY ../build/libs/${JAR} /${JAR}
ENTRYPOINT ["nohup", "java","-Dspring.profiles.active=local","-jar","$JAR", "&"]
파이프라인 구축 완료
이제 프로젝트에서 코드 수정 후 커밋을 해보자.
그럼 Jenkins 빌드가 자동으로 돌아간다.

빌드 완료


컨테이너를 확인해보면 알아서 nohup + Background로 스프링 부트 서버가 실행중이다.
Docker Private Container Registry에도 이미지가 잘 교체되고 들어갔다.

'⚙️ Ops > CI & CD' 카테고리의 다른 글
[Jenkins] Jenkins 분산 빌드 파이프라인 구축 정리 (0) | 2023.06.02 |
---|---|
[Jenkins] EC2 생성 후 Setting Script 작성 (0) | 2023.05.30 |
[Jenkins] Jenkins 기본 설정 (On Local) (0) | 2023.05.26 |
[Jenkins] Item (프로젝트) 설정 (0) | 2023.05.26 |
[Jenkins] Jenkins 기본 설정 (On Container) (0) | 2023.05.26 |