728x90
이번에는 Freestyle project가 아닌 Pipeline으로 만들어 보려고 한다. (결과가 좀 더 보기 좋게 나온다고함)
pipeline {
agent any
//등록한 jdk를 활성화
tools {
jdk 'openjdk-17-jdk'
}
//스테이지로 구성됨 각각의 단계
stages {
//준비 단계
stage('Prepare') {
steps {
git branch: 'master',
url: 'https://github.com/sh970901/dockerDB'
}
post {
//성공했을 경우
success {
sh 'echo "Successfully Cloned Repository"'
}
//실패했을 경우
failure {
sh 'echo "Fail Cloned Repository"'
}
}
}
stage('Create Test Database') {
//DB 테스트 단계
steps {
sh '''
docker exec mariadb_1 mysql -h 127.0.0.1 -ulldjlocal -p1234 -e 'DROP DATABASE IF EXISTS app20220916_2__test;'
'''
sh '''
docker exec mariadb_1 mysql -h 127.0.0.1 -ulldjlocal -p1234 -e 'CREATE DATABASE IF NOT EXISTS app20220916_2__test;'
'''
}
post {
success {
sh 'echo "Successfully Create Database Test"'
}
failure {
sh 'echo "Fail Create Database Test"'
}
}
}
stage('Build Gradle Test') {
//그래들 빌드 테스트
steps {
sh (script:'''
echo "Build Gradle Test Start"
''')
dir('.') {
sh """
chmod +x gradlew
"""
}
dir('.') {
sh """
activeProfile=test testDbIp=172.17.0.1 testDbId=lldjlocal testDbPw=1234 ./gradlew clean build
"""
}
}
post {
success {
sh 'echo "Successfully Build Gradle Test"'
}
failure {
sh 'echo "Fail Build Gradle Test"'
}
}
}
stage('Docker Rm') {
//기존 도커 종료
steps {
sh 'echo "Docker Run Start"'
sh """
docker stop sbdb_1
docker rm -f sbdb_1
docker rmi -f sbdb
"""
}
post {
success {
sh 'echo "Docker Rm Success"'
}
failure {
sh 'echo "Docker Rm Fail"'
}
}
}
stage('Bulid Docker Image') {
//새로운 이미지 빌드
steps {
sh 'echo " Image Bulid Start"'
sh """
docker build -t sbdb .
"""
}
post {
success {
sh 'echo "Bulid Docker Image Success"'
}
failure {
sh 'echo "Bulid Docker Image Fail"'
}
}
}
stage('Docker Run') {
//이미지 실행
steps {
sh 'echo "Docker Run Start"'
sh """
docker run \
--name=sbdb_1 \
-p 8080:8080 \
-v /docker_projects/sbdb_1/volumes/gen:/gen \
--restart unless-stopped \
-e TZ=Asia/Seoul \
-d \
sbdb
"""
}
post {
success {
sh 'echo "Docker Run Success"'
}
failure {
sh 'echo "Docker Run Fail"'
}
}
}
}
}
Freestyle에서 진행하는 내용을 풀어서(?) 쓴 느낌이다. 더 세밀한 작업이 가능할 것 같다. 젠킨스 빌드를 해보고 확인해보자.
각 단계 별로 몇초가 걸렸는지, 그리고 각 과정의 log 등 깔끔하고 정밀한 결과를 확인 할 수 있다.
이제 다시 소스코드를 변경하고 커밋했을 때 결과를 보자.
소스 코드 변경
- 소스 코드를 변경하고 자동화가 되는지 확인해보자.
- 깃 허브에 Webhook을 추가했는지 체크하자.
- 안되어있다면 ngrok의 forwarding 주소/github-webhook/ 추가
- commit하고 push
- webhooks manage에서 결과를 확인할 수 있다.
실행 결과
정상적으로 빌드가 자동화 되었음을 확인할 수 있다.
'IT' 카테고리의 다른 글
스프링부트 카카오 소셜 로그인 1(셋팅 및 설정 작업) (0) | 2022.09.25 |
---|---|
OAuth 2.0 (access Token 발급 과정) (0) | 2022.09.25 |
젠킨스(jenkins)로 스프링부트 자동화 2(도커, DB 설치, 빌드) (0) | 2022.09.21 |
젠킨스(jenkins)로 스프링부트 자동화 1(jenkins에서 jdk-17설치) (1) | 2022.09.21 |
젠킨스(jenkins) 3(github webhook, Private 레포지, 비밀키, 공개키) (0) | 2022.09.21 |