반응형
들어가기 전
- spring boot 애플리케이션을 jar로 빌드하고 docker image로 빌드해서 docker private registry로 push하는 과정을 소개
docker private registry 서버 실행
- 빌드한 docker image를 관리하는 registry 서버를 먼저 실행
- 해당 예제에서 registry 주소는 192.168.56.12:5000
- 참고 : https://sg-choi.tistory.com/625
docker가 포함된 jenkins 서버 실행
- Docker로 설치(jenkins + docker) 참고 : https://sg-choi.tistory.com/211
jenkins 서버에 daemon.json 설정
- daemon.json 설정 참고 : https://sg-choi.tistory.com/625
jenkins git 프로젝트 빌드 설정
- git 프로젝트 빌드 설정 : https://sg-choi.tistory.com/212
프로젝트에 파일 추가 후 commit & push
{프로젝트}/.jenkins/build.groovy
context = [:]
pipeline {
agent any
stages {
stage('select branch') {
steps {
script {
sshagent(credentials: ["demo-api-github-sshkey"]) {
sh "git fetch --prune"
def branches = sh(script: "git branch -r", returnStdout: true).split("\n").collect { it.trim().replace("origin/", "") }.sort().reverse()
def branch = input(message: 'BRANCH', parameters: [choice(description: "BRANCH", name: "BRANCH", choices: branches,)])
sh "git checkout ${branch}"
sh "git pull"
context.tag = "${new Date().format("yyyyMMddHHmmss")}-${branch.replaceAll("/|-", "_")}"
}
}
}
}
stage('build jar') {
steps {
sh "docker run -v /var/jenkins_home/.gradle:/home/gradle/.gradle -v \${PWD}:/project -w /project gradle:7.6.0-jdk17-alpine gradle clean bootJar -x test"
}
}
stage('build docker image') {
steps {
sh "docker build -t 192.168.56.12:5000/demo-api:${context.tag} -f .jenkins/Dockerfile ."
}
}
stage('test docker image') {
steps {
script {
try {
sh "docker run --rm -dit -p 9090:9090 --name demo-api 192.168.56.12:5000/demo-api:${context.tag}"
sh "docker run --rm -i --add-host host.docker.internal:host-gateway alpine/curl --retry-all-errors --max-time 5 --retry-delay 3 --retry 2 http://host.docker.internal:9090/api/health"
} finally {
sh "docker stop demo-api || exit 0"
}
}
}
}
stage('push docker image') {
steps {
sh "docker image push 192.168.56.12:5000/demo-api:${context.tag}"
}
}
}
}
{프로젝트}/.jenkins/Dockerfile
FROM openjdk:17
LABEL app_name="demo-api"
COPY build/libs/*.jar /deploy/app.jar
EXPOSE 9090
CMD java -jar -Dserver.port=9090 /deploy/app.jar
jenkins 빌드 실행 및 확인
- 성공시 docker private registry에 잘 push가 되었는지 확인
curl http://192.168.56.12:5000/v2/_catalog
{"name":"example","tags":["latest"]}
http://192.168.56.12:5000/v2/demo-api/tags/list
{
"name": "demo-api",
"tags": [
"20230123155634-develop",
"20230123155840-develop"
]
}
반응형
'Development > Jenkins' 카테고리의 다른 글
[Jenkins] docker container 무중단 배포 (0) | 2023.01.23 |
---|---|
[Jenkins] Ansible 연동 (0) | 2020.12.28 |
[Jenkins] Jenkins Pipeline (0) | 2020.12.28 |
[Jenkins] Jenkinsfile (0) | 2020.12.28 |
[Jenkins] Selenium 테스트 설정 (0) | 2019.11.24 |