Pipeline์ผ๋ก ์น ๋ฐฐํฌํ๊ธฐ (Jenkinsfile)
๐ก ์ ํจ์ค์์ ์๋ก์ด ์์ดํ ์์ฑํ๊ธฐ
โ โ ์๋ก์ด Item
โ๏ธ ์ ํจ์ค์์ ์์ดํ ์ด๋?
์๋กญ๊ฒ ์ ์ํ ์์ ์ ๋งํ๋ค.
๋ชจ๋ ์์ ์ ์ ์์ ์์๋ฅผ ๋ชจ์๋ ์ ์ฒด ์์ ์ ํ๋ก์ ํธ๋ผ๊ณ ํ๋ฉฐ, ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ์์๋ Freestyle, Pipeline๋ฑ์ด ์๋ค.
์ด๋ ๊ฒ ํ๋ก์ ํธ๋ฅผ ์ ์ํ๊ณ ์์ฑํ๋ ๊ฒ์ ์์ดํ ์ด๋ผ๊ณ ํ๋ค.
๐ก Pipeline
โ๏ธ Pipeline์ด๋?
์ ํจ์ค์์ ์ง์ํ๋ ๊ณ ์ ์ Pipeline ๋ฌธ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด ์์ ์ ์ ์ํ๋ ํ๋ก์ ํธ์ด๋ค.
๊นํ๋ธ์ ๊ฐ์ ์ฝ๋ ์ ์ฅ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์ฌ๋ฆด ๋ Pipeline ์ฝ๋๋ก ์์ฑํ ํ์ผ์ ํจ๊ป ์ฌ๋ ค๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ฐฐํฌ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ ์ ์์ด ๊ด๋ฆฌ ํธ๋ฆฌ์ฑ์ด ๋๋ค.
Pipeline์ ๊ณ ์ ์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ ์ฝ๋ ๋๋ ์ด๋ฌํ ๋ด์ฉ์ ๋ด๊ณ ์๋ ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ํ์ดํ๋ผ์ธ ๋ฌธ๋ฒ์ ํ ํด ์ ํจ์ค๋ ์ฝ๋๋ก ์์ฑํ ๋ด์ฉ์ด ์ค์ ๋์ํ๋ ์์ ์ด ๋๋ ์ฝ๋๋ก์์ ํ์ดํ๋ผ์ธ์ ๊ตฌํํ ์ ์๋ค.
์ ํจ์ค Pipeline์ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฌธ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ๋ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด๊ณ ๋ ๋ฒ์งธ๋ ์ ์ธ์ ์ธ ๋ฌธ๋ฒ์ด๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์์์ ์ ํจ์ค ์์ด์ ํธ๋ฅผ ์ค์ ํ ๋ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ต์ํ์ง ์๋ ์ ํจ์ค์ ๊ณ ์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํด์ผ ํ๋ค.
ํ์ง๋ง ์ ์ธ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ต์ํ ์ผ๋ฏ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ ์ธ์ ์ธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
โ Pipeline script from SCM
์ธ๋ถ ์ ์ฅ์์์ ์ ์ธ์ ์ธ ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ ํ์ผ์ ๊ฐ์ง๊ณ ์ค๊ธฐ ์ํด์.
์์ ๊ฐ์ด ์ค์ ํ ์ ์ฅ
๐ก Jenkinsfile
โ๏ธ Jenkinsfile์ ๊ตฌ์ฑ์์
๐งท pipeline
์ ์ธ์ ์ธ ๋ฌธ๋ฒ์ด ์์ํ๋ ๋ถ๋ถ
๐งท agent
์์ ์ ์ํํ ์์ด์ ํธ๋ฅผ ์ง์ ํ๊ณ ํ์ํ ์ค์ ์ ํ๋ ๋ถ๋ถ์ผ๋ก ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ์์ด์ ํธ๋ฅผ ์ ํจ์ค๊ฐ ์์๋ก ์ง์ ํ๋ any
ํน์ ๋ ์ด๋ธ๊ณผ ์ผ์นํ๋ ์์ด์ ํธ ๋ ธ๋๋ฅผ ์ง์ ํ๋ label
์์ด์ ํธ ๋ ธ๋์ ์ด๋ฏธ์ง๋ฅผ ๋์ปค๋ก ์ง์ ํ๋ docker
์์ด์ ํธ ๋ ธ๋๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค ํ๋๋ก ์ง์ ํ๋ kubernetes
๐งท stages
stage๋ฅผ ๋ชจ์์ ์ ์
๐งท stage
step๋ค์ ์ ์ํ๋ ์์ญ
์ ํจ์ค์์ ๋น๋๊ฐ ์งํ๋ ๋ stage๋ณ๋ก ์งํ ๋จ๊ณ๋ฅผ ํ์ธํ ์ ์๋ค.
๐งท steps
stage ๋ด๋ถ์์ ์ค์ ์์ ๋ด์ฉ์ ์์ฑํ๋ ์์ญ
step ์์ญ ๋ด๋ถ์์ script, sh, git๊ณผ ๊ฐ์ ์์ ์ ํตํด ์ค์ ๋ก ๋์ํ๊ฒ ๋๋ค.
pipeline {
agent any
stages {
stage('git scm update') {
steps {
git url: 'https://github.com/YoonHakyoung/cicdtest.git', branch: 'main'
}
}
stage('docker build and push') {
steps {
sh '''
sudo docker build -t yoonhakyoung/cicdtest:1.0 .
sudo docker push yoonhakyoung/cicdtest:1.0
'''
}
}
stage('deploy kubernetes') {
steps {
sh '''
ansible master -m command -a 'kubectl create deployment pl-bulk-prod --image=yoonhakyoung/cicdtest:1.0'
ansible master -m command -a 'kubectl expose deployment pl-bulk-prod --type=LoadBalancer --port=80 --target-port=80 --name=pl-bulk-prod-svc'
'''
}
}
}
}
- 'git scm update' : ๊นํ๋ธ๋ก๋ถํฐ ์์ค ์ฝ๋๋ฅผ ๋ด๋ ค๋ฐ์ ๋จ๊ณ
- 'docker build and push' : ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋น๋ํ๊ณ , ๋น๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ ์ง์คํธ๋ฆฌ์ ์ ์ฅ
- 'deploy kubernetes' : ์ด๋ฏธ์ง๋ฅผ pl-bulk-prod๋ก ๋ฐฐํฌํ๊ณ , ๋ฐฐํฌํ ํ๋๋ฅผ ๋ก๋๋ฐธ๋ฐ์ ํ์ ์ผ๋ก ๋ ธ์ถ
โ ์ง๊ธ ๋น๋
์๋ Build History์์ #1์ด ์ถ๊ฐ๋๋ ๊ฒ ํ์ธ ๊ฐ๋ฅ
์์ ์ด ์ฑ๊ณตํ๋ฉด ์ฐ์ธก์์ ๊ฐ ์คํ ์ด์ง ๋ณ ๋จ๊ณ์ ์ฑ๊ณต ์ฌ๋ถ ์์ ์๊ฐ๊ณผ ๊ฐ์ ์ ๋ณด ํ์ธ ๊ฐ๋ฅ.
'Linux > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Jenkins] CentOS8์์ Jenkins ์ฌ์ฉํ๊ธฐ (0) | 2024.02.20 |
---|---|
[Docker] Docker swarm์ผ๋ก ์๋น์ค ๋ฐฐํฌํ๊ธฐ (0) | 2024.02.04 |
[Docker] Docker Swarm์ผ๋ก ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๊ธฐ (0) | 2024.02.04 |
[Docker] Attachable Overlay Network์ ํ์ฉํ ๋์ปค ์คํ ์คํ (0) | 2024.02.02 |
[Docker] Dockerfile ๋ช ๋ น์ด (0) | 2024.02.01 |