728x90
구축 순서
1. Jenkins Pipeline & Github webhook 설정
2. Jenkinsfile 작성
3. ArgoCD 구축
Jenkins Pipeline
- Job들을 순차적 혹은 병렬적으로 실행시키거나 작성한 스크립트로 이벤트들을 연속적으로 실행시키는 등의 일을 지원하는 기능
- Job 하나 작성할 때 대부분 GUI로 제공받아 마우스로 체크해서 설정했다면 Pipeline은 이러한 내용들을 스크립트를 통해 더 딥하고 유연하게 작성할 수 있음
- 작성하려는 배포 플로우가 복잡하다면 pipeline 스크립트로 작성
Jenkinsfile
1. gradle build
stage('Bulid Gradle') {
agent any
steps {
echo 'Bulid Gradle'
dir ('.'){
sh """
chmod +x gradlew
./gradlew clean build --exclude-task test
"""
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
2. docker build
k8s 배포에 사용할 Docker image를 빌드 할 때 앞서 생성한 Jar을 담는 stage를 작성
// docker build
stage('Bulid Docker') {
agent any
steps {
echo 'Bulid Docker'
sh "echo jenkins | sudo -kS chmod 666 /var/run/docker.sock"
script {
dockerImage = docker.build imagename
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
Dockerfile
FROM openjdk:19-alpine
ARG JAR_FILE=build/libs/KITe_sendManager-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
3. docker push
빌드된 Docker image 를 DockerHub에 push하는 stage를 작성
stage('Push Docker') {
agent any
steps {
echo 'Push Docker'
script {
docker.withRegistry( '', registryCredential) {
dockerImage.push("${currentBuild.number}")
}
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
4. ArgoCD GitOps Repo Patch
Push to manifest repo
stage('Deploy to dev') {
agent { label 'argocd' }
steps {
git credentialsId: 'github', url: 'https://github.com/Guts-Gun/KITe_ArgoCD.git',branch: 'main'
sh """
git pull origin main
sed -i 's/kite_sendmanager:.*\$/kite_sendmanager:${currentBuild.number}/g' service/sendmanager-deployment.yaml
git config user.name '[gitUsername]'
git config user.email '[gitEmail]'
git add service/sendmanager-deployment.yaml
git commit -m 'kite_sendmanager ${currentBuild.number} image versioning'
"""
withCredentials([gitUsernamePassword(credentialsId: 'github')]) {
sh "git remote set-url origin https://github.com/Guts-Gun/KITe_ArgoCD.git"
sh "git push origin main"
}
post {
failure {
echo 'K8S Manifest Update failure !'
}
success {
echo 'K8S Manifest Update success !'
}
}
}
}
https://github.com/Guts-Gun/KITe_ArgoCD
더보기
pipeline {
agent any
environment {
imagename = "[docker build로 만들 이미지 이름]"
registryCredential = '[docker hub credential ID]'
dockerImage = ''
}
stages {
// gradle build
stage('Bulid Gradle') {
agent any
steps {
echo 'Bulid Gradle'
dir ('.'){
sh """
chmod +x gradlew
./gradlew clean build --exclude-task test
"""
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
// docker build
stage('Bulid Docker') {
agent any
steps {
echo 'Bulid Docker'
sh "echo jenkins | sudo -kS chmod 666 /var/run/docker.sock"
script {
dockerImage = docker.build imagename
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
// docker push
stage('Push Docker') {
agent any
steps {
echo 'Push Docker'
script {
docker.withRegistry( '', registryCredential) {
dockerImage.push("${currentBuild.number}")
}
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
// GitOps Repo Patch
stage('Deploy to dev') {
agent { label 'argocd' }
steps {
git credentialsId: 'github', url: 'https://github.com/Guts-Gun/KITe_ArgoCD.git',branch: 'main'
sh """
git pull origin main
sed -i 's/kite_sendmanager:.*\$/kite_sendmanager:${currentBuild.number}/g' service/sendmanager-deployment.yaml
git config user.name '[gitUsername]'
git config user.email '[gitEmail]'
git add service/sendmanager-deployment.yaml
git commit -m 'kite_sendmanager ${currentBuild.number} image versioning'
"""
withCredentials([gitUsernamePassword(credentialsId: 'github')]) {
sh "git remote set-url origin https://github.com/Guts-Gun/KITe_ArgoCD.git"
sh "git push origin main"
}
post {
failure {
echo 'K8S Manifest Update failure !'
}
success {
echo 'K8S Manifest Update success !'
}
}
}
Credentials 관리
- GitHub에 대한 Access 정보는 SSH Key를 이용, Jenkins Credentials에 저장
- GitHub Api에 대한 Access Token 정보는 Secret Text Jenkins Credentials에 저장
- Pipeline에서 withCredentials로 활용
manifest 레포지토리 - git push 내역
728x90