๐ ์ ํจ์ค ํ์ดํ๋ผ์ธ์ ํ์ฉํ ๋ฐฐํฌ ์๋ํ
- ํ์ดํ๋ผ์ธ์ ํ์ฉํ์ฌ ๋ฐฐํฌ ์๋ํ
ย
โ๏ธ ํ์ฌ ์ํฉ
ํ๋ก์ ํธ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ base branch์ merge ๋์๋ค. ์ด์ ์ค์ ์๋ฒ์ ๋ฐฐํฌ๋ฅผ ํด์ผํ๊ฒ ๋ค.
ย
โ๏ธ ํํ๋ก์ ํธ์์ ๋ง์ด ์ฌ์ฉํ๋ work flow - ํ์ฌ ๋งค๋ฒ ์คํ๋์ด์ผ ํ๋ค.
(1) ๊ฐ ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ ํ PR (2) EC2 ์๋ฒ๋ก ์ ์ (3) github์ merge๋ ์ฝ๋๋ฅผ git pull (4) gradle์ ์ด์ฉํด bootJar (5) jar ํ์ผ์ java -jar ๋ช ๋ น์ด๋ฅผ ํตํด 80port์ ์คํํ๋ค.=> 5๊ฐ์ง๋ฅผ ๋งค๋ฒ ์คํํด์ผ ํ๋ค. ๊ท์ฐฎ์ง ์์๊ฐ? Jenkins
๋ฅผ ์ด์ฉํ๋ฉด ํด๊ฒฐํ ์ ์๋ค.
ย
๐ก ์ฐธ๊ณ
- ์๋ฒ ๋ฐฐํฌ๋ ๋งค๋ฒ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์ํ๋์ด์ผ ํ๋ค.
- ํ์ฌ flow๋ ์๋ก์ด ๊ธฐ๋ฅ๋ง๋ค ๋ฐ๋๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, ์๋ํ ํ ์ ์๋ ๋์์ด๋ค.
ย
โ๏ธ Continuous Distribution - ์ง์์ ๋ฐฐํฌ
flow
๋ฅผ ์๋ํํ์ฌ ์ต์ ์ํ์ ์ฝ๋๊ฐ ์๋์ผ๋ก ๋ฐฐํฌ๋๋ ๊ฒ
ย
โ๏ธ Jenkins๊ฐ ํด์ฃผ๋ ๊ฒ์?
Jenkins
๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ ํด์ฃผ์ง๋ ์๋๋ค.
Jenkins๊ฐ ํด์ฃผ๋ ๋ถ๋ถ์?
(1) github์ผ๋ก๋ถํฐ merge ๋์๋ค๋ ์ฐ๋ฝ์ ๋ฐ์์
(2) ์ฝ๋๋ฅผ git cloneํ๊ณ
(3) gradle๋ก ํ๋ก์ ํธ๋ฅผ build ํ์ฌ
(4) buildํ ๋ชฉ์ ํ์ผ์ ์ดํ๋ฆฌ์ผ์ด์
์ด ์คํ๋์ด์ผ ํ ์๋ฒ๋ก ์ ๋ฌํ๊ณ , ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ๋ํ๊ธฐ ์ํ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
ย
โ๏ธ Jenkins์ ์ค์ ์ด ๋ฐฐํฌ๋ฅผ ํ ๋ ์ด๋ค ๋ถ๋ถ์ ์๋ํ ํด์ฃผ๋ ๊ฑธ๊น?
ย
๐ก ์ฐธ๊ณ
์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ Jenkins๋ฅผ ๊ตฌ๋ํ ๊ฒฝ์ฐ, ๋น๋๊ฐ ์งํ๋ ๋๋ง๋ค CPU ์์์ด ๋ชจ์๋ผ์ ์๋ฒ๊ฐ ๋ค์ด๋๋ ์ผ์ด ์๋ค.
์ด๋ก ์ธํด ๋ณ๋ EC2๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ฝ, ์๋ฒ ์์์ด ๋ชจ์๋ผ๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ WAS๋ฅผ ๋์ธ ์ผ์ด ์๊ธด๋ค๋ฉด, ๋ณ๋ ํ๊ฒฝ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
ย
โ๏ธ Ubuntu ์ด๊ธฐ์ค์ (20.04)
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install openjdk-11-jdk
ย
ย
๐ก ์ฐธ๊ณ
sudo apt-get install openjdk-11-jdk
: java 11 jdk ์ค์น
ย
์ปดํจํฐ๊ฐ ๋ ๋์ ์ git clone์ ํ๊ฒ ํ๋ ค๋ฉด ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ ๋ํ ๊ถํ์ด ํ์ํ๋ค!
ย
๐ก ์ฐธ๊ณ
- ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ์ ์๋ ์์ค์ฝ๋๋ฅผ clone ํ๋ ๋ชฉ์ ์ด๋ผ๋ฉด ๊ถํ์ด ํ์์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก credentials๋ฅผ ์ค์ ํ์ง ์์๋ ๋๋ค.
PipeLine
์์์ push ๋๋ ์๋ธ๋ชจ๋ ๋ฑ ๊ถํ์ด ํ์ํ ์ผ์ด ์๋ค๋ฉดcredentials
์ด ํ์ํ๋ค.
ย
ย
โ๏ธ github repository ์ฐ๊ฒฐ
ย
ย
โ๏ธ credentials์ด ํ์ํ๋ค (๋ฏธ๋ฆฌ ์์ฑํ์)
ย
โ๏ธ ๋ฑ๋ก ํน์ ํ์ธ ๊ฐ๋ฅํ๋ค.
credentials
๋ ์ถํ manage credentials
์์ ๋ฑ๋ก ํน์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
ย
ย
๐ก ์ฐธ๊ณ
- ๊ฐ๋จํ Job์ ์ํด์ freestyle๋ ์ข์ ์ ํ (๋น๊ต์ ์ธํ ์ด ๋จ์)
- ๋ณต์กํ ์ข ๋ฅ์ Job๊ฐ์ ์ฐ๊ณ๋ ์์ธํ ์ธํ , UI (๊ฐ job๋ณ๋ก ์ด๋ป๊ฒ ์งํ๋๊ณ ์๋์ง ๋ณด์ฌ์ค๋ค.)๋ฅผ ์ํ๋ค๋ฉด ํ์ดํ๋ผ์ธ์ ์ ํ
ย
โ๏ธ pipeline script
pipeline script์ Groobee ๋๋ Jenkins์์ ์ ์ํ pipeline syntax๋ฅผ ํตํด item์์ ์ํํ Job์ ์ ์ธํ๊ณ , ์์๋ฅผ ์กฐ์ ํ๊ณ , ํ๊ฒฝ์ ์ค์ ํ๋ ์ญํ ์ ํ๋ค.
ย
โ๏ธ pipeline syntax
ํ๋ฌ๊ทธ์ธ ๋ณ๋ก syntax๋ฅผ ๋ง๋ค์ด์ค๋ค.
(1) pipe line
์ ์ด ํ์ดํ๋ผ์ธ ์์ฒด๋ฅผ ์๋ฏธํ๋ค.
(2) agent
๋ ์ด ํ์ดํ๋ผ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ executor
๋ฅผ ์ง์ ํ๋ค. any
๋ก ๋ ์ ์ด๋ค executor
๋ ์คํํ ์ ์๋ค๋ ์๋ฏธ๊ฐ ๋๋ค.
(3) stages
๋ ์คํํ Job๋ค์ ์งํฉ์ด๋ค.
(4) stage
๋ ๊ฐ๊ฐ์ Job์ ์๋ฏธํ๋ค. Job ๋ด๋ถ์ ๋จ๊ณ๋ฅผ ์๋ฏธํ๋ steps๋ฅผ ํฌํจํด์ผํ๋ค.
(5) steps
์์ ์ค์ ๋ก ์คํํ ์์ด๋ syntax
๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด ๋๋ค.
ย
ย
git clone
ํ๊ธฐ ์ํด์๋ syntax
๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. (pipeline syntax๋ฅผ ํด๋ฆญ)
pipeline syntax -> snippet generate
click
ย
repository url
์ ์ ์ด์ฃผ๊ณ , branch
๋ฅผ ์ ํํ๊ณ , credentials
๋ฅผ ๋ฃ์ด์ค๋ค. ย
ย
- `stage` ์ด๋ฆ์ ์ํ๋ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ๊ณ , `steps`์๋ ์์์ ์์ฑํ `snippet`์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค. - **์ฝ์ด๋ณด๋ฉด, git ํน์ ๋ธ๋์น์์ ํน์ `credentials`๋ก url์ ๋ ํฌ์งํ ๋ฆฌ์์ ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ `snippet`์ด๋ค.**=> ์ด์ ์ ์ฅ์ ๋๋ฅด๋ฉด, github
์ clone
ํ๋ job์ ๊ฐ์ง ํ์ดํ๋ผ์ธ์ ์์ฑํ ๊ฒ์ด๋ค.
ย
๐ก ์ฐธ๊ณ
- ํ ๋ฒ์ ์ ์ฒด job์ ์์ฑํ๋ฉด trouble shooting์ด ํ๋ค์ด์ง๋ฏ๋ก ๊ฐ ๋จ๊ณ๋ณ๋ก ํ ์คํธ ํ์.
- ๋์ฌ๋ณด๋์์ ์์ฑํ ์์ดํ ์ ํด๋ฆญํ์ฌ ๋ค์ด๊ฐ์๋ค.
ย
โ๏ธ ์ด์ ๊น์ง ์์ ํ ๋ด์ฉ ํ ์คํธ
- ์๋์ ์ผ๋ก build ํ ์, job์ ์ ๋ฐํ๋ค. - ์คํ๋์ด Build History์ ์ ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค.ย
โ๏ธ ๋น๋ ๊ณผ์ ์์ ์ถ๋ ฅ๋๋ ์ฝ์๋ฌธ์ console output
ํญ์์ ํ์ธํ ์ ์๋ค.
ย
ย
๐ฃ ์์ํ๊ธฐ์
- ๋น๋๋(Build) cloneํด ์จ ์์ค์ ํฌํจ๋์ด ์๋ gradle wrapper๋ฅผ ํ์ฉํ๋ค!
- ํ๋ก์ ํธ์์ .gradlew ์์น๋ฅผ ์ฐพ์์ผ ํ๋ค.
- dir ์ค๋ํซ : cd
sh ''' ${์ ๋ช ๋ น์ด} '''
: pipeline syntax์์ ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋๋ก ์ค์ ํ๋ ๋ถ๋ถ- ํ์ฌ ๋น๋๋ฅผ ์ํด ์คํํด์ผํ ํ ์คํธ :
clean
,bootJar
ย
pipeline {
agent any
stages {
stage('github clone') {
steps {
git branch: 'main', credentialsId: 'repo-and-hook-access-token-credentials', url: 'https://github.com/ToDoStudy/study_jenkins'
}
}
stage('build'){
steps {
dir('jenkins') {
sh '''
echo 'start bootJar'
./gradlew clean bootJar
'''
}
}
}
}
}
ย
โ๏ธ ์ค๋ํซ(snippet)
์ค๋ํซ(snippet) :ย ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์์ค ์ฝ๋, ๊ธฐ๊ณ์ด, ํ
์คํธ์ ์์ ๋ถ๋ถ์ ์ผ์ปซ๋ ํ๋ก๊ทธ๋๋ฐ ์ฉ์ด
stages
: ์คํํ Job๋ค์ ์งํฉstage
: ๊ฐ๊ฐ์ Job์ ์๋ฏธย
โ๏ธ build ๊ฒฐ๊ณผ(์คํจ)
- ํ์ฌ ์๋ธ ๋ชจ๋์ initํ๊ณ updateํ์ง ์๋๋ค!ํ์ฌ ์คํจํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋์๋ค. ์ด์ ๋?
์ฝ๋๋ฅผ ๋น๋ํ ๋ ์๋ธ๋ชจ๋์ด ํ์ํ๋ฐ, ํด๋น ๋ด์ฉ์ ๊ณ ๋ คํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. (๋ง์ฝ์, ์๋ธ ๋ชจ๋์ด ์์๋ค๋ฉด ์ฑ๊ณต์ด๋ค!)
git plugin snippet
์ ์๋ธ ๋ชจ๋์ init
๊ณผ update
๊น์ง ์ง์ํด์ฃผ์ง ์๋๋ค.
=> ์ด๋ ๊ฒ ์์ฑํ syntax๊ฐ ์ํ๋๋๋ก ๋์ํ์ง ์๋๋ค๋ฉด ๋ค๋ฅธ step์ ์ฐพ๊ฑฐ๋, ๊ณต์๋ฌธ์๋ฅผ ํตํด ์ํ๋ ์ค์ ์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.
ย
โ๏ธ ์๋ธ๋ชจ๋๊น์ง ๋ฐ์์ค๊ธฐ ์ํด ๋ค๋ฅธ step syntax์ ํ์ฉํด๋ณด์
์๋ธ ๋ชจ๋๊น์ง ๋ฐ์์ค๊ธฐ ์ํด์๋ ๋ค๋ฅธ step syntax์ ํ์ฉํด๋ณด์!
checkout์ผ๋ก ๊ฒ์ํ์ฌ ํด๋น simple step์ ์ ํํ๋ค.
private repository๋ก ๋ฑ๋กํ ์๋ธ๋ชจ๋์ ๋ฐ์์ค๊ธฐ ์ํ ์ฌ์ ์ด๋ฏ๋ก! credentials๋ฅผ ์ธํ
ํด์ค๋ค.
ย
- `pipeline syntax`์์ `additional behaviours`์ add ๋ฒํผ์ ํด๋ฆญํ ํ, `Advanced sub-modules behaviours`๋ฅผ ๋๋ฌ ์์ ๊ฐ์ด ์ค์ ํด์ค๋ค. - `Generate Pipeline Script`์ ๋๋ฌ์, ๋ถ๋ชจ ๋ ํฌ์งํ ๋ฆฌ์ `credentials`๋ฅผ ๊ทธ๋๋ก ํ์ฉํ๋ค.ย
- ์์ฑํ `pipeline script`๋ฅผ steps ํ์์ ๋ถ์ฌ๋ฃ์ด์ **๊ธฐ์กด์ `git syntax`๋ฅผ ๋์ฒดํด์ค๋ค.** - ์๋ธ ๋ชจ๋ ๊ด๋ จ ๋ช ๋ น์ด๊ฐ ์ถ๊ฐ๋์๋ค.ย
โ๏ธ ํ์ฌ๊น์ง์ ํ์ดํ๋ผ์ธ
pipeline {
agent any
stages {
stage('github clone') {
steps {
checkout scmGit(branches: [[name: '*/main']], extensions: [submodule(parentCredentials: true, reference: '', trackingSubmodules: true)], userRemoteConfigs: [[credentialsId: 'repo-and-hook-access-token-credentials', url: 'https://github.com/ToDoStudy/study_jenkins']])
}
}
stage('build'){
steps {
dir('jenkins') {
sh '''
echo 'start bootJar'
./gradlew clean bootJar
'''
}
}
}
}
}
ย
โ๏ธ ํ ์คํธ ๊ฒฐ๊ณผ
์ฒ์์๋ 3์๊ฐ ์ ๋ ๊ธฐ๋ค๋ ค๋ ๋น๋์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค. (์ด๋ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ec2 ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ 1GB ์ด๊ธฐ ๋๋ฌธ์ด๋ค.) ํด๊ฒฐ์ฑ : EC2 ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 1GB + 2GB ์ถ๊ฐ
ย
ย
์ด์ ๋ฐฐํฌ์ฉ Jenkins์์ WAS์ฉ EC2๋ก Build ๊ฒฐ๊ณผ ํ์ผ์ ์ ๋ฌํด์ผ ํ๋ค.
์ด๋ฅผ ์ํด์๋ Publish over ssh ํ๋ฌ๊ทธ์ธ์ ํ์ฉํด์ฃผ๋ฉด ๋๋ค.
โ๏ธ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
ย
๐ก ์ฐธ๊ณ
(Ubuntu22๋ฒ์ ์ฌ์ฉํ ๊ฒฝ์ฐ jenkins.plugins.publish_over.bappublisherexception: failed to connect and initialize ssh connection. message: failed to connect session for config ์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ง๋ ์๋ ์์ผ๋ Ubuntu20.04.5 ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.) -> ๋ด๊ฐ ๊ฒฝํํ ์ค๋ฅ
ย
ย
Source files
: ์์คํ์ผ์ ์์น, gradlew wrapper์์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ build/libs/
๋ก ์์นํ๋ฏ๋ก, build/libs/*.jar
๋ก ์์ฑํ์๋ค.Remove prefix
: ์์คํ์ผ์์ ์๋ณธํ์ผ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ด๋๊น์ง ํฌํจํ ๊ฒ์ธ์ง์ ๋ํ ์ค์ remote directory
: ๋ฐฐํฌ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋๋ค. ๋ฐฐํฌ ์๋ฒ์ ํด๋น ํด๋๋ก ๋ชฉ์ ํ์ผ์ด ๋์ฐฉํ๊ฒ ๋๋ค. (๋๋ ํฐ๋ฆฌ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ผ ํ๋ค.)Exec command
: ์ ์ก์ ๋ง์น๊ณ ์คํํ shell ๋ฌธ์ ๋๋ ํฐ๋ฆฌ ๋ฐ ํ์ผ ์์น์ด๋ค.ย
โ๏ธ ํ๋ก์ ํธ์์ ์ ๊ณตํ๋ ๋ฐฐํฌ ์
echo "> pid ํ์ธ"
CURRENT_PID=$(ps -ef | grep java | grep D208 | grep -v nohup | awk '{print $2}')
echo "$CURRENT_PID"
if [ -z ${CURRENT_PID} ] ;then
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ผ๋ฏ๋ก ์ข
๋ฃํ์ง ์์ต๋๋ค."
else
echo "> sudo kill -9 $CURRENT_PID"
sudo kill -9 $CURRENT_PID
sleep 10
fi
echo "> jujeol ๋ฐฐํฌ"
JAR_PATH=$(ls -t /home/ubuntu/D208-Project/deploy/*.jar | head -1)
sudo nohup java -jar ${JAR_PATH} >> /home/ubuntu/D208-Project/logs/D208.log &
CURRENT_PID=$(ps -ef | grep java | grep D208 | grep -v nohup | awk '{print $2}')
: CURRENT_PID
์ ํ์ฌ ์คํ๋๊ณ ์๋ ํ๋ก์ ํธ์ pid๋ฅผ ๋ฐ์์จ๋ค.ps -ef | grep java | grep D208 | grep -v nohup | awk '{print $2}'
CURRENT_PID
๊ฐ ์๋ค๋ฉด ๋จผ์ ์ข
๋ฃํ๋ค. (์
ง๋ค์ด ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ sleep์ ํด์ค๋ค.)deploy
ํด๋์์ ๋ง์ง๋ง jar์, 80port์ dev ํ๋กํ๋ก ์คํํ๋ค.ย
๐ ๋ฆฌ๋ ์ค
2>&1
๊ทธ๋ฆฌ๊ณ/dev/null
์ฐธ๊ณ : https://inpa.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-devnull-%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%EC%85%98-%EA%B8%B0%ED%98%B8-%EC%A2%85%EB%A5%98
(1)2>&1
(2)/dev/null
/dev/null
๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ธ๋ค๋ ๊ฒ์, ๋ฐ์ดํฐ๋ฅผ ์ฃ๋คย ๋ง๋ํ ์์ ๋ฒ๋ ค์ย ๊น๋ํ๊ฒ ํ๋ฉด์ ํ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋งํ๋ค.
ย
ย
ํ์ฌ๊น์ง์ ํ์ดํ๋ผ์ธ
pipeline {
agent any
stages {
stage('git clone') {
steps {
checkout scmGit(branches: [[name: '*/main']], extensions: [submodule(parentCredentials: true, reference: '', trackingSubmodules: true)], userRemoteConfigs: [[credentialsId: 'repo-and-hook-access-token-credentials', url: 'https://github.com/ToDoStudy/study_jenkins']])
}
}
stage('build'){
steps {
dir('jenkins') {
sh '''
echo 'start bootJar'
./gradlew clean bootJar
'''
}
}
}
stage('publish on ssh'){
steps{
dir('jenkins'){
sshPublisher(publishers: [sshPublisherDesc(configName: 'ECGumD208', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh /home/ubuntu/D208-Project/script/init_server.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/D208-Project/deploy', remoteDirectorySDF: false, removePrefix: 'build/libs', sourceFiles: 'build/libs/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
}
}
}
}
}
ย
โ๏ธ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์๋์ง ํ์ผ ํ์ธ
ps -ef | grep java
๋ช
๋ น์ด๋ฅผ ํตํด ๊ตฌ๋์ด ์๋์๋์ง ํ์ธํ๋ค.)=> ์ด์ Jenkins ์น ์ฝ์์ ์ ์ํด build now๋ฅผ ๋๋ฅด๋ฉด ํ๋ก๊ทธ๋จ์ ์๋ ๋ฐฐํฌํ ์ ์๋ ๋ฐํ์ ๋ง๋ จํ๋ค!
ย
ย
โ๏ธ github์์ ์ ๊ณตํ๋ webhook
=> ์ด๋ฅผ ์ ์ฉํด๋ณด๊ธฐ ์ํด PR์ด merge๋ ๋ ์๋์ผ๋ก ๋น๋๊ฐ ์ผ์ด๋๋๋ก ์ค์ ํด๋ณด์!
ย
๐ก ์ฐธ๊ณ
Github hook trigger for GITScm polling
์ต์ ์ freestyle์์ build trigger๋ก ๋ง์ด ์ฌ์ฉํ์๋ค.
ํ์ง๋ง, pipeline์์๋ ์ ๋๋ก ๋์์ํค๊ธฐ ์ด๋ ต๊ณ ๋ํ ์ผํ ์ธํ ์ ํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
ย
โ๏ธ ๋ฐฑ์๋ PR merge์๋ง Jenkins๊ฐ ๋์ํ๋๋ก ๋ง๋ค์ด๋ณด์!
์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น?
=> Pull Request์ ๋ผ๋ฒจ์ ๋ฐํ์ผ๋ก ๋ฐฑ์๋์ ํ๋ก ํธ์๋ PR์ ๊ตฌ๋ถํ๋๋ก ํด๋ณด์!
=> ๋ฐฑ์๋ ๋ผ๋ฒจ์ด ๋ถ์ด ์๋ PR์ด ๋จธ์ง ๋์์ ๋๋ง ๋น๋๊ฐ ์ผ์ด๋๋๋ก ํด๋ณด์!
ย
โ๏ธ Generic Webhook Trigger ํ๋ฌ๊ทธ์ธ ์ค์น
ย
ํ์ดํ๋ผ์ธ์ ์์ธ๋ด์ฉ์์ build triggers
๋ก ์ด๋ํ๋ฉด, generic webhook trigger
๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ผ๊ณ ํ์ง๋ง, ์ผ๋จ์ ์๊ฐ์ด ์์ด
Github hook trigger for GITScm polling
์ ์ฌ์ฉํ๋ค. (์ถํ ๋ณ๊ฒฝ๋ ์์ )
ย
ย
์ฐธ๊ณ