[DevOps] Jenkins Build ๋ด์ฉ Slack ์ผ๋ก ์๋ฆผ ๋ฐ๊ธฐ
2022. 8. 31. 20:28ใSystem ์์ ์ค/DevOps
728x90
๋ฐ์ํ
๐ ๋ชฉ์ฐจ
โ [Synology NAS] ๋๋ง์ GitHub ๋ง๋ค๊ธฐ - Git Server์ Gitea ์ค์น
โ [Synology NAS] ๋๋ง์ Jenkins ๋ง๋ค๊ธฐ
โ[DevOps] GitHub์ Jenkins ์ฐ๊ฒฐ
โ [DevOps] Jenkins Build ๋ด์ฉ Slack ์ผ๋ก ์๋ฆผ ๋ฐ๊ธฐ
โ [DevOps] Jenkins Github Multi Branch Pipe Line ๊ตฌ์ฑ
๐ Jenkins์ Slack ์ฐ๊ฒฐ ํ๊ธฐ
๐ฝ Slack ์ค์
๐ฆ Application ๋ด๋ ค๋ฐ๊ธฐ
์ต์ด Slack์์ ์ฑ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๋๋ค.
๊ฒ์์ฐฝ์ jenkins๋ฅผ ์
๋ ฅํ์ฌ Jenkins CI App์ ์ฐพ๊ณ , ํด๋ฆญํฉ๋๋ค.
๊ตฌ์ฑ์ ๋๋ฌ์ค๋๋ค.
Web Page์์ ์์ ๊ฐ์ ์ฐฝ์ด ๋จ๋ฉด install์ ๋๋ฌ ์ค์นํด ์ค๋๋ค.
Slack ์๋ฆผ์ ๋ฐ์ ์ฑ๋(๋ฐฉ)์ ์ ํํ ๋ค Jenkins CI ํตํฉ ์ฑ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๋๋ค.
์์ ๊ฐ์ด ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋๋ฐ, ๊ทธ๋๋ก ๋ฐ๋ผํ๋ฉด ๋๊ณ , ํ ํ์ ๋๋ฉ์ธ, ํตํฉ ํ ํฐ ์๊ฒฉ์ฆ๋ช
ID๋ฅผ Jenkins์ ์
๋ ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ด๋ฒ๋ฆฌ์ง ์๋๋ก ํฉ๋๋ค.
๐ฝ Jenkins ์ค์
๐ฆ Jenkins์ Slack ์ฐ๋
Jenkins์์ Manage Jekins๋ฅผ ๋๋ฌ์ค๋๋ค.
ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ๋ฅผ ๋๋ฌ์ค๋๋ค.
728x90
์ค์น ๊ฐ๋ฅ Tab์์ Slack Notification Plugin์ ์ค์นํด ์ค๋๋ค.
๐ฆ Slack Notification ์ค์
Main ํ๋ฉด์์ Jenkins ๊ด๋ฆฌ์์ ์์คํ
์ค์ (Configure System)์ ๋๋ฌ์ค๋๋ค.
Workspace์ Slack์์ Jenkins CI App ์ค์ ์ ๋ฐ์๋ ํ ํ์ ๋๋ฉ์ธ์ ์
๋ ฅํด ์ฃผ์ธ์.
Defulat chanel / member id ์๋ ์๋ฆผ์ ๋ฐ์ Slack Chanel ์ด๋ฆ์ ์
๋ ฅํด ์ฃผ์ธ์.
๊ทธ๋ฐ ๋ค Credentials์ Add๋ฅผ ๋๋ฌ์ค๋๋ค.
๋ฐ์ํ
Slack์์ Jenkins CI App ๊ตฌ์ฑ ์ ํตํฉ ํ ํฐ ์๊ฒฉ ์ฆ๋ช
ID๊ฐ์ Secret๋์ ์ ์ด์ฃผ๊ณ , ID๋ ์ํ๋ ๊ฐ์ ์
๋ ฅํ ๋ค Add๋ฅผ ๋๋ฌ์ฃผ์ธ์.
Test Connection์ ๋๋ฌ Slack์ ์๋ฆผ์ด ์ค๋์ง ํ์ธํฉ๋๋ค.
๋ชจ๋ ์๋ฃ ๋๋ฉด ์๋ ์ ์ฅ(Save)๋ฅผ ๋๋ฌ ํด๋น ์ฐฝ์ ๋น ์ ธ ๋๊ฐ๋๋ค.
์๋ฆผ์ ๋ฐ์ Project ์ด๋ฆ์ ์ ํํด ์ค๋๋ค.
๊ตฌ์ฑ์ ๋๋ฌ์ค๋๋ค.
๋น๋ ํ ์กฐ์น ์ถ๊ฐ๋ฅผ ๋๋ฌ ์ค๋๋ค.
Slack Notifications๋ฅผ ์ ํํด ์ค๋๋ค.
์๋ฆผ ๋ฐ๊ณ ์ ํ๋ ๋ด์ฉ์ ์ ํํด ์ค๋๋ค.
๊ทธ๋ฐ ๋ค ์ ์ฅ(Save)๋ฅผ ๋๋ฌ์ค๋๋ค.
์ข ๋ ์์ธํ ๋ด์ฉ์ ๋ฐ๊ธฐ ์ํด ์ค์ Script๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์์ ๊ฐ์ด Project root directory์ jenkinsfile-ci๋ฅผ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
pipeline {
agent any
environment {
PATH = "/opt/gradle/gradle-6.8/bin:$PATH"
SLACK_CHANNEL = '#jenkins' // ์ฑ๋
TEAM_DOMAIN = 'black-postoffice' // ์ํฌ์คํ์ด์ค
TOKEN_CREDENTIAL_ID = 'junghyungil-Slack'// ์์์ ์์ฑํ ํ ํฐ
}
stages {
stage('Start') {
steps {
// channel, temaDomainm, tokenCredentialId์ ์ ํจ์ค-์ฌ๋ ์ฐ๋์ ์ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์์ ์ง์ํด์ฃผ๋ ์ค์ ๊ฐ๋ค์
๋๋ค. ์ด ์ค์ ๊ฐ๋ค์ environment { ... } ์์ ์์ฑํ ๊ฐ๋ค์ ์ด๊ธฐํ ํด์ค๋๋ค
slackSend (channel: SLACK_CHANNEL, color: '#FFFF00', message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})", teamDomain: TEAM_DOMAIN, tokenCredentialId: TOKEN_CREDENTIAL_ID )
}
}
stage('Git Checkout') {
steps {
checkout scm
echo 'Git Checkout Success!'
}
}
stage('Build') {
steps {
sh 'gradle clean build --exclude-task test'
echo 'Build Success!'
}
}
stage('Test') {
steps {
sh 'gradle test'
echo 'Test Success!'
}
}
}
post {
success {
slackSend (channel: SLACK_CHANNEL, color: '#00FF00', message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})", teamDomain: TEAM_DOMAIN, tokenCredentialId: TOKEN_CREDENTIAL_ID )
}
failure {
slackSend (channel: SLACK_CHANNEL, color: '#F01717', message: "FAILURE: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})", teamDomain: TEAM_DOMAIN, tokenCredentialId: TOKEN_CREDENTIAL_ID )
}
}
}
์์ ๊ฐ์ด Script๋ฅผ ์
๋ ฅํด ์ค๋๋ค.
๊ทธ๋ฐ ๋ค Github์ push๋ฅผ ํด ์ค๋๋ค.
์ง๊ธ ๋น๋๋ฅผ ๋๋ฌ ์ค๋๋ค.
์ ์์ ์ผ๋ก ์๋ฆผ์ด ์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ง ์ฐธ๊ณ ์๋ฃ
https://phoby.github.io/slack-jenkins-notification/
https://junghyungil.tistory.com/169
https://dnight.tistory.com/entry/Jenkins-Slack-%EC%95%8C%EB%A6%BC-%EC%97%B0%EB%8F%99
728x90
๋ฐ์ํ