젠킨스 파이프라인과 깃허브 웹훅으로 commit시 자동 빌드/배포
23.05.10 ~ 05.14
git, DB는 이미 설치 및 세팅이 되어있다고 가정
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
도메인:8081
비밀번호 확인 후 접속, 추천 플러그인 설치
docker exec jenkins_1 cat /var/jenkins_home/secrets/initialAdminPassword
사용자 생성
23.05월 기준으로 기본적으로 젠킨스 이미지에는 11이 깔려있는데, 내 프로젝트는 자바17기반이기 때문에 업데이트를 해주어야한다.
docker exec -it jenkins_1 bash
apt-get update
apt-get install openjdk-17-jdk -y
exit
java --version
env
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
echo $JAVA_HOME
완료 시 17버전이 되있는걸 볼 수 있다.
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
새로운 아이템 > 이름: gram_1 > pipeline 선택
몇가지 방법들이 존재한다. 내가 사용한 방법은 이렇다.
Jenkins Credential Plugin에 저장하여 pipeline에서 application-secret.yml을 같이 빌드하게끔 만들자.
Jenkins 관리에서 Credentials > Add Credentials
github public repo에서 가져올때는 이렇게만 작성해도 된다.
private이라면, 어떻게 해야하는지 추후 작성
pipeline {
agent any
tools {
jdk 'openjdk-17-jdk'
}
stages {
stage('Prepare') {
steps {
git branch: 'main',
url: '<https://github.com/kkambbak/MyPublicRepo>'
}
post {
success {
sh 'echo "Successfully Cloned Repository"'
}
failure {
sh 'echo "Fail Cloned Repository"'
}
}
}
stage('secret.yml download') {
steps {
withCredentials([file(credentialsId: 'gram_secret', variable: 'secret_yml_file')]) {
script {
sh 'cp $secret_yml_file ./src/main/resources/'
}
}
}
}
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 gram_1 &&
docker rm -f gram_1 &&
docker rmi -f gram
"""
}
post {
success {
sh 'echo "Docker Rm Success"'
}
failure {
sh 'echo "Docker Rm Fail"'
}
}
}
stage('Bulid Docker Image') {
steps {
sh 'echo " Image Bulid Start"'
sh """
./gradlew bootBuildImage
"""
}
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=gram_1 \\
-p 8080:8080 \\
-v /docker_projects/gram_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"'
}
}
}
}
}
github의 webhook 설정에서
도메인:8081/github-webhook/으로 설정
젠킨스에서 Build Trigger에서 웹훅 체크
쿠버네티스까지 활용하는 것도 기록해보도록 하겠다.