?
๊ฐ๋ฐ์๋ ๊ฐ๋ฐ๋ง ์ํ๋ฉด ๋๋ ๊ฑฐ ์๋์๋?
๊ฐ๋ฐ์๋ฅผ ๋ฐฉํดํ๋ ๊ฐ๋ฐ ์ธ์ ์ธ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ๊ฐ์ง ์๊ฒ ์ง๋ง, ์ฌ๊ธฐ์ 2๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์.
๋ฌธ์ 1. ์ฝ๋๋ฅผ ํ๋๋ก ํตํฉํ๋ ๊ณผ์ ์ด ๋๋ฌด ์คํธ๋ ์ค์ผ
ํ๋์ ํ๋ก์ ํธ์์ 10๋ช ์ ๊ฐ๋ฐ์๊ฐ ํํธ๋ฅผ ๋๋ ๊ฐ๋ฐํ๋ ๋ชจ์ต์ ์์ํด๋ณด์. ๊ฐ์ ๊ฐ๋ฐํ ์ฝ๋๋ฅผ ํ๋๋ก ํตํฉํ๊ธฐ ์ํด, ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ ๋ง๋ค ๊ฐ๋ฐ์๋ค์ ์ฝ๋ ๋ฒ ์ด์ค์ ์ปค๋ฐ์ ๋ฃ์ ๊ฒ์ด๋ค. ์ฐฉํ๊ฒ ํฉ์ณ์ง๋ฉด ์ฐธ ์ข๊ฒ ์ง๋ง ์ปค๋ฐ๋ค์ ๋จธ์งํ๊ธฐ ์์ํ๋ฉด "๋ง์ง๋ง ์ปค๋ฐ ๋๊ตฌ์ผ, ๋ด ๊บผ ์ ๋์์! "์ ๊ฐ์ ์์ฐ์ฑ์ด ํฐ์ ธ๋์ค๊ธฐ ๋ง๋ จ์ด๋ค. ์ด๋ฅผ 'Merge hell'์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
์์ ๊ฐ์ ์ฌํ๋ฅผ ๋ง์ ๋ฐฉ๋ฒ์ด ํ๋ ์๋ค. ์ปค๋ฐ์ ํ ๋ ๋ง๋ค ์ฝ๋์ ๋ํด ํ ์คํธ์ ๋น๋๋ฅผ ์คํํด๋ณด๋ ๊ฒ์ด๋ค. ๋น์ฐํ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ๊ท์ฐฎ๊ณ ๋ฌ๊ฐ์ง ์์ ์ผ์ด์ง๋ง ํ์ ํด ๊ฐ๋ฐํ ์ฝ๋๋ ํตํฉํ๋ ์์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด์ฉ ์๊ฐ ์๋ค.
๋ฌธ์ 2. ์๊พธ ๋ค๋ฅธ ๋ถ์์์ ์ ๋ฒ์ ์ ๋ฐฐํฌํด๋ฌ๋ผ๊ณ ํด
๊ฐ๋ฐํ๋ ์ค, ํด๋น ๊ธฐ๋ฅ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ๋๋ค๋ฉด ์๋ก ๋ฐฐํฌํด๋ฌ๋ผ๋ ๋ค๋ฅธ ๋ถ์์ ์์ฒญ์ด ๋ค์ด์จ๋ค. ์์ถํ์ผ๋ก ๋๋ฑ ๋ณด๋ด์ฃผ๋ ๊ฒ์ ๋ด๊ฐ ํด๋น ๋ถ๋ถ์ ๋ด๋น์๋ผ๋ฉด ์์ ์ ์๋ ์ผ์ด๋ค. ๋ง๋ ํ ์ ๋ฐ์ดํธ๋ ์ฝ๋๋ฅผ ๋น๋ํด ์ฝ์๋ ํํ๋ก ๊ณต์ ํด์ค์ผ ํ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ , AWS ์ฝ์์ ๋ง์ง๊ณ , ... ๋ฐฐํฌ ์ญ์ ๋ณดํต ์์ ์ด ์๋๋ค. ํ์ง๋ง ์ด ์ญ์ ํ์ ์ ์ํด์ ๊ผญ ํ์ํ ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ด์ฉ ์๊ฐ ์๋ค.
0. CI/CD
๋ฌธ์ 1์ CI์ ๊ด๋ จํ ๋ฌธ์ ์ด๋ค. CI๋ Continuous Integration์ ์ฝ์๋ก '์ง์์ ์ธ ํตํฉ'์ ์๋ฏธํ๋ค. ์ ํํ๋ '์ฌ๋ฌ ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ํตํฉํ๋ ๊ณผ์ '์ ์๋ฏธํ๋ค. ๋ฌธ์ 2๋ CD์ ๊ด๋ จํ ๋ฌธ์ ์ด๋ค. Continous Delivery์ ์ฝ์๋ก '์ง์์ ์ธ ๋ฐฐํฌ'๋ฅผ ์๋ฏธํ๋ค. ์ ํํ๋ '์ต์ ์ ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ๋ฐฐํฌํ๋ ๊ณผ์ '์ ์๋ฏธํ๋ค.
CI(Continous Integration)๋ '์ฌ๋ฌ ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ํตํฉํ๋ ๊ณผ์ '
CD(Continous Delivery)๋ '์ต์ ์ ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ๋ฐฐํฌํ๋ ๊ณผ์ '
1. Jenkins
์ฌ์ค ๋ฌธ์ 1, ๋ฌธ์ 2๋ ์์ด ๋ง์ด ๊ฐ ๋ฟ ํด๊ฒฐ์ฑ ์ด ์๋ ๋ฌธ์ ๋ ์๋์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์์ด ๋ง์ด ๊ฐ๋ ๊ณผ์ ์ ์ผ๋ จ์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ง๋ค์ด ์๋ํํด์ฃผ๋ ์ํํธ์จ์ด๋ค์ด ์์ผ๋, ๊ทธ ์ค ๋ํ์ ์ธ ๋ ์์ด Jenkins๋ค. CI๋ฅผ ์ํด ์ปค๋ฐ์ด ๋ค์ด์ค๋ฉด, ์๋์ผ๋ก ํ ์คํธํ๊ณ ๋น๋๋ฅผ ํด์ค๋ค. ๊ณผ์ ์ ๋ฌธ์ ๊ฐ ์์๋ค๋ฉด ํ๋์ ์ฝ๋ ๋ฒ ์ด์ค์ ํตํฉํด์ค๋ค. ์ด ์ต์ ์ ์ฝ๋๋ค์ ๋น์ฅ ์ฌ์ฉํ ์ ์๋ ์ํ๋ก ๊ณต์ ํ๋ฉฐ CD๊น์ง ํด๊ฒฐํด์ค๋ค. ์ด์ ๋ด๊ฐ ํด์ผํ ์ผ์ ์ด์ฌํ ๊ฐ๋ฐํ๊ณ ์ปค๋ฐํด์ ์ฝ๋ ๋ฒ ์ด์ค์ ๋ด ์ฝ๋๋ฅผ ์์ฐฉ์ํค๋ ๊ฒ๋ง ์๊ฐํ๋ ๊ฒ์ด๋ค. Jenkins๊ฐ ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํด ๊ฒ์ฆ, ํตํฉ, ๋ฐฐํฌ๋ฅผ ๋ชจ๋ ํด์ค ๊ฒ์ด๋ค!
Jenkins Pipeline
Jenkins๋ ์๋ํ ์์ ์ด๊ธฐ ๋๋ฌธ์, ํ๋ก์ ํธ ๋ณ๋ก ์ ๋์ ์ผ๋ก ์ค์ ํด์ผํ๋ ๋ถ๋ถ์ด ๋ง๋ค. ์๋ฅผ ๋ค์ด, Gitlab ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ค ํด๋๋ก ๋๋ ค๊ณ ํ๋ค๋ฉด Gitlab ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ Jenkins๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ํด์ผ ํ๋ค. ์ด๊ฒ์ ์ํด Jenkins๋ ๋งค์ฐ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๊ณ ์๋ค. ์ผ๋ จ์ CI/CD ๊ณผ์ ์ ์ฒ๋ฆฌํ ์ ์๋๋ก, ํ๋ก์ ํธ์ ๋ง๊ฒ ํ๋ฌ๊ทธ์ธ๋ค์ ๋ค์ด ๋ฐ๋๋ค.
์ด ํ๋ฌ๊ทธ์ธ๋ค์ Jenkins Pipeline์ด๋ผ๋ ๊ณณ์ ๊ฝํ๋ค. ๋ง ๊ทธ๋๋ก Jenkins์ ํ ์คํธ, ๋น๋, ๋ฐฐํฌ ๋ฑ์ ์์ธ ๊ณผ์ ์ ์ ์ํ๋ ํ์ดํ๋ผ์ธ์ด๋ค. Jenkins Pipeline์ ์ ์ํ๋ ๋ฌธ๋ฒ์๋ Declatrative, Scripted ๋ ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค. ์ด ์ค Declarative ๋ฐฉ์์ ๋ผ๋๋ฅผ ์ดํด๋ณด์.
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Build') {
steps {
//
}
}
stage('Test') {
steps {
//
}
}
stage('Deploy') {
steps {
//
}
}
}
}
Jenkins Pipeline์ ํฌ๊ฒ 4๊ฐ์ Section์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- Agent Section : Jenkins๊ฐ ์ฌ๋ฌ ๋ ธ๋๊ฐ ๋ ์์ ์๋ ์๋๋ฐ, ๋ ธ๋ ๋จ์์ ์ ๋ฌด๋ฅผ ์ง์ํ๋ค.
- Stages Section : ๊ธฐ๋ณธ์ ์ผ๋ก ์ํํด์ผ ํ๋ ์ ๋ฌด๋ณ ๋จ์(stage)๋ฅผ ์ ์ํ๋ค.
- Steps Section : ๊ฐ ์ ๋ฌด(stage)์ ์์ธ ์์ ์ ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ฅ(step)๋ค์ ํ์ฉํด ์ ์ํ๋ค.
- Post Section : ๊ฐ ์ ๋ฌด(stage)๊ฐ ๋๋ ํ์ ๋ฃจํด์ ์ ์ํ๋ค.
2. ์์ฝ
- CI/CD๋ ํ์ ์ ์ํด์ ๊ผญ ํ์ํ์ง๋ง ๋ฒ๊ฑฐ๋กญ๊ณ , ๊ฐ๋ฐ ์ธ์ ์ธ ์๋ชจ๊ฐ ํฌ๋ค.
- Jenkins๋ ์ฝ๋์ ํตํฉ๊ณผ ๋ฐฐํฌ๋ฅผ ์๋ํํด์, ๊ฐ๋ฐ์๊ฐ ์ฝ๋์๋ง ์ง์คํ ์ ์๋๋ก ํด์ค๋ค.
- ํ๋ฌ๊ทธ์ธ์ ์กฐํฉํ๊ณ 4๊ฐ์ Section์ ์์ฑํด Jenkins Pipeline์ ๋ง๋ค์ด ์๋ํ ๊ณผ์ ์ ์ ์ํ๋ค.
[์ฐธ๊ณ ]
https://www.youtube.com/watch?v=JPDKLgX5bRg
https://www.jenkins.io/doc/book/pipeline/
'๐ป > ์ธํ๋ผ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
.yaml ์์ ์ค ๋ฐ๊ฟํ๋ 9๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2023.04.27 |
---|---|
[CI/CD] Vue ํ๋ก์ ํธ๋ฅผ Jenkins (docker-in-docker) ๋ฐฐํฌํ๊ธฐ (0) | 2022.07.08 |
[Docker] Docker, JAVA๋ก MSA ๊ตฌ์ถํ๊ธฐ (0) | 2022.05.07 |
[Linux] amd / arm (0) | 2021.07.31 |
[Docker] ๋ช ๋ น์ด ๋ชจ์ (0) | 2021.07.30 |