1. CI / CD ๊ฐ ๋ฌด์์ธ๊ฐ
CI/CD๋?
CI: Continuous Integration ์ฆ, ์ง์์ ์ธ ํตํฉ์ด๋ผ๋ ์๋ฏธ
์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ๊ธฐ์ ์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ ๋์ด ๊ณต์ ๋ ํฌ์งํ ๋ฆฌ์ ํตํฉํ๋ ๊ฒ์ ์๋ฏธ
๋ชฉํ
- ๋ฒ๊ทธ๋ฅผ ์ ์ํ๊ฒ ์ฐพ์ ํด๊ฒฐํ๊ณ
- ์ํํธ์จ์ด์ ํ์ง์ ๊ฐ์ ํ๊ณ
- ์๋ก์ด ์ ๋ฐ์ดํธ์ ๊ฒ์ฆ ๋ฐ ๋ฆด๋ฆฌ์ฆ์ ์๊ฐ์ ๋จ์ถ์ํค๋ ๊ฒ
์ ๋ฆฌํ์๋ฉด CI๋ ๊ฐ๋ฐ์๊ฐ ํ๋ฃจ์ ์ฌ๋ฌ ๋ฒ ์ฝ๋๋ฅผ ๊ณต์ ์ ์ฅ์์ ํตํฉํ๋๋ก ์๊ตฌํ๋ ๊ฐ๋ฐ ๋ฐฉ์์ด๋ฉฐ, CI์ ๊ถ๊ทน์ ์ธ ๋ชฉํ๋ ๋ ์ข์ ์ฝ๋๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. ์๊ท๋ชจ๋ก ์ด๋ฃจ์ด์ง๋ ์ฆ์ ๋ณ๊ฒฝ์ ์๋ํ๋ฅผ ์ ์ฉํ๋ฉด ํ์์ ๋ฒ๊ทธ๋ฅผ ๋์ฑ ๋น ๋ฅด๊ฒ ์ฐพ๊ณ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ์๋ก์ด ์ ๋ฐ์ดํธ๋ฅผ ๊ฒ์ฆํ๊ณ ๋ฆด๋ฆฌ์คํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
CD: Continuous Delivery , CD: Continuous Deployment ์ด ๋ ์ฉ์ด์ ์ถ์ฝ์ด ์ฆ, ์ง์์ ์ธ ์๋น์ค ์ ๊ณต or ์ง์์ ์ธ ๋ฐฐํฌ๋ผ๋ ์๋ฏธ
- Continuous Delivery๋ ๊ณต์ ๋ ํฌ์งํ ๋ฆฌ๋ก ์๋์ผ๋ก Releaseํ๋ ๊ฒ
- Continuous Deployment๋ Production ๋ ๋ฒจ๊น์ง ์๋์ผ๋ก deploy ํ๋ ๊ฒ
์ ๋ฆฌํ์๋ฉด, CI๊ฐ ์๋ก์ด ์์ค์ฝ๋์ ๋น๋, ํ ์คํธ, ๋ณํฉ๊น์ง๋ฅผ ์๋ฏธํ๊ณ , CD๋ ๊ฐ๋ฐ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋์ด, ๊ณ ๊ฐ์ ํ๋ก๋์ ํ๊ฒฝ๊น์ง Release ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
CI/CD ํด
Jenkins, Github action, Gitlab CI / CD ๋ฑ์ด ์๋ค. ์ด์ Jenkins์ ๋ํด ์์๋ณด๊ฒ ๋ค.
DevOps Tool Chain์ด๋?
๋ฐ๋ธ์ต์ค(DevOps) ์ ์ฉ์ด ๊ฐ๋ฅํ ํด์ ๋ฌถ์ด ํ๋์ ์ฒด์ธ ํ์์ผ๋ก ๋ชจ๋ ๊ณผ์ (๊ณํ-์ฝ๋-๋น๋-ํ ์คํธ-๋ฆด๋ฆฌ์ฆ-๋ฐฐํฌ-์ด์-๋ชจ๋ํฐ๋ง)์ ๋ฌถ์ด ์ฌ์ฉํ๋ ๊ฐ๋ ์ด์ ๋ฐ๋ธ์ต์ค ๋ฌธํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ์ ๋งํ๋ค. ๊ฐ๊ฐ์ ๊ฐ๋จํ ๋งํ์๋ฉด
Plan: ๋น์ฆ๋์ค ๊ฐ์น ๋ฐ ์๊ตฌ์ฌํญ์ ์ ์.
Code: ์ํํธ์จ์ด ์ค๊ณ ๋ฐ ์ํํธ์จ์ด ์ฝ๋ ์์ฑ์ด ํฌํจ.
Build: ์ํํธ์จ์ด ๋น๋ ๋ฐ ๋ฒ์ ์ ๊ด๋ฆฌํ๊ณ ์๋ํ๋ ํด์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ํจํค์งํ์ฌ ํฅํ ์ ํ ๋ฆด๋ฆฌ์ฆ์ ์ ๊ณต.
Test: ์ต์ ์ ์ฝ๋ ํ์ง์ ๋ณด์ฅํ๊ธฐ ์ํด ์ง์์ ์ธ ํ ์คํธ(์๋ ๋๋ ์๋)๋ฅผ ์ํ.
deploy: ์ ํ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ด์ ๋จ๊ณ๋ก ๊ด๋ฆฌ, ์กฐ์ , ์์ฝ ๋ฐ ์๋ํํ๋ ๋ฐ ๋์์ด ๋๋ ํด์ด ํฌํจ.
Operate: ์ด์ ์ค์ธ ์ํํธ์จ์ด๋ฅผ ๊ด๋ฆฌ.
Monitor: ์ด์ ํ๊ฒฝ์ ํน์ ์ํํธ์จ์ด ๋ฆด๋ฆฌ์ฆ์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์๋ณํ๊ณ ์์ง.
์ด์ ๋ฐ๋ผ ์ฐ๋ฆฌ๋ ํด์ฒด์ธ์ ํตํด ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋จ๊ธฐ๊ฐ์ ๋ฐ์ ํ ์ ์๋ ํ์ง๋์ ์ํํธ์จ์ด๊ฐ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ฉฐ ํ ๊ท๋ชจ, ํ๋ก์ ํธ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ DevOps ํด ์ฒด์ธ์ ๋ น์ฌ๋ด๋ ๊ฒ์ด ์ค์ํ๋ค.
๋น๋์ ๋ฐฐํฌ๊ฐ ์ค์ํ๋ ์กฐ๊ธ ๋ ์์ธํ ์์๋ณด์
๋น๋: ์ปดํ์ผ ๋ ์ฝ๋๋ฅผ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ์ํ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ
์ด๋ฐ ๋น๋๋ฅผ ๋์์ฃผ๋ ๋๊ตฌ = build tool ( maven, gradle ๋ฑ)
๋ฐฐํฌ: ๋น๋๊ฐ ์์ฑ๋ ์คํ ๊ฐ๋ฅํ ํ์ผ์ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ํ ์ ์๋ ํ๊ฒฝ์ ๋ฐฐ์น์ํค๋ ๊ฒ
๋น๋์ ๋ฐฐํฌ๋ฅผ ์๋ํํด์ผ ํ๋ ์ด์
- ์๊ฐ๊ณผ ๋น์ฉ ์ ๊ฐ
- ์ผ๊ด์ฑ๊ณผ ์์ ์ฑ ํฅ์
- ๋ณต์ก์ฑ ๊ด๋ฆฌ
- ํ๋ฒ ์๋ํ ํ๋ฉด ๋ฐ๋ณต์ ์ธ ์์ ์ ๋ฐ๋ณตํ์ง ์์๋ ๋๋ค.
2. Jenkins๋
๊ท์ฐฎ์ ์์ ์ ์๋ํ ํด์ฃผ๋ ๊ฒ, ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ํ์ฉํด์ ์๋ํ ์์ ์ ํด์ค๋ค. ์๋ํ ์์ ์ ์์๋ค์ ์งํฉ์ Pipeline์ด๋ผ ํ๋๋ฐ ์ด๋ฅผ ํตํด CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๋ค. ์ฆ, ์ฐํจ์ค ์์ฒด๋ ๋น ๊ป๋ฐ๊ธฐ์ด๊ณ , ๋ค์ํ ํ๋ฌ๊ทธ์ธ๋ค์ ์กฐํฉํด์ ์ฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ์ปค๋ฐ์ด ๋งค์ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๊ฒ ๋๊ณ , ์ปค๋ฐ ํ์๋งํผ ๋น๋ ํ๋๊ฒ์ด ์๋๋ผ ํ์ ์ ์ฅ๋์ด ์๋ค๊ฐ ์์ ์ด ์คํ๋ ์ฐจ๋ก๊ฐ ๋์ด์์ผ ๋น๋์ ํ ์คํธ ์์ ๋ค์ด ์คํ๋๋ค. ์ฐํจ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ํ ํ ์คํธ๋ฅผ ์ํํ๊ณ , ์ปดํ์ผ ํ๊ฒฝ์์์ ์ค๋ฅ๊ฒ์ถ๊ณผ ์ ์ ์ฝ๋ ๋ถ์์ ํตํ ์ฝ๋ฉ ๊ท์ฝ ์ค์์ฌ๋ถ๋ฅผ ์ฒดํฌํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
์ด ์ธ์๋ ์ ํจ์ค๋ 500์ฌ๊ฐ์ง๊ฐ ๋๋ ํ๋ฌ๊ทธ์ธ์ ์จ๋ผ์ธ์ผ๋ก ๊ฐ๋จํ ์ค์น ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์์ฝ๊ฒ ์์ ์๊ฒ ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์๋ ์๋ค.
์ ํจ์ค๋ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
1 GitHub์ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์
2 GitHub์ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฐ์ง๋๋ฉด, ์ค์ ๋ GitHub Webhook์ด Jenkins์๊ฒ HTTP POST ์์ฒญ
3 Jenkins์์ ๋ณ๊ฒฝ์ฌํญ ๊ฐ์งํ๊ณ ์ CI / CD ํ์ดํ๋ผ์ธ ์คํ
4 ๋น๋ & ๋ฐฐํฌ
5 ์ํํธ์จ์ด๋ฅผ ๋น๋ํ๊ณ ํ ์คํธํ ํ, Docker ์ด๋ฏธ์ง๋ก ํจํค์งํ๊ณ EC2 ์ธ์คํด์ค์ ๋ฐฐํฌํ๋ค.
๋ฐ๋ผ์ ์ ํจ์ค๋ฅผ ์ฌ์ฉํ๋ฉด CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์ฌ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๊ณ ๊ฐ์ ํ ์ ์๋ค.
ํ์ดํ๋ผ์ธ์ด ๋ฌด์์ผ๊น? ์ด๋ ต๊ฒ ์๊ฐํ ๊ฒ ์์ด ์์ ๋ช ์ธ์. ์ธํํ๋๋ฐฉ๋ฒ์ ๋ํ ํ์ดํ๋ผ์ธ์ด ์์ผ๋ฉด ์๋์ ๊ฐ์ 3๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ค.
- 1 ๋นจ๋๋ฅผ ์ธํ๊ธฐ์ ๋ฃ๋๋ค
- 2 ์ธ์ ๋ฅผ ์ธํ๊ธฐ์ ๋ฃ๋๋ค
- 3 ์ธํ๊ธฐ๋ฅผ ์คํํ๋ค
์ด๊ฒ์ด ํ์ดํ๋ผ์ธ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ ํจ์ค์ ์ฅ์
- ์๋ํ ํ ์คํธ๋ฅผ ์ํ
- ์ปดํ์ผ ํ๊ฒฝ์์ ์ปดํ์ผ ์ค๋ฅ ๊ฒ์ถ
- ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋์์ฃผ๋ ๋ง์ ํ๋ฌ๊ทธ์ธ ๋ณด์
3. Github action๊ณผ ์ฐจ์ด์
์ฒ์์ ์๋ํ๋ฐฐํฌ๋ฅผ ๋ฐฐ์ธ ๋ Github action์ ๋ฐฐ์ ๊ณ , ์ด๋ฅผ ํตํด ๋น๋์ ๋ฐฐํฌ๋ฅผ ์๋ํํ์๋ค.
์ด ๋์ ์ฅ๋จ์ ์ ๋น๊ตํด๋ณด์
Jenkins | Github Action |
์๋ฒ ์ค์น๊ฐ ํ์ํ๋ค | ํด๋ผ์ฐ๋๊ฐ ์์ด, ๋ณ๋ ์ค์น ํ์์๋ค |
๋๊ธฐํ CI / CD | ๋น๋๊ธฐ CI / CD |
ํ๊ฒฝ ํธํ์ฑ์ ์ํด ๋์ปค ์ด๋ฏธ์ง์์ ์คํํ๋ค | ๋ชจ๋ ํ๊ฒฝ๊ณผ ํธํ |
๋ฌธ์๊ฐ ๋ค์ํ๋ค | ์ต๊ทผ์ ๋์๊ธฐ์ ์ฐธ๊ณ ๋ฌธ์๊ฐ ์ ๋ค |
CI / CD ๊ตฌ์ฑ์ด ์ด๋ ค์ด ํธ์ด๋ค. | ์์ฝ๊ฒ CI / CD ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค |
์ฒ๋ฆฌ์๋๊ฐ ๋น ๋ฅด๋ค | ์ฒ๋ฆฌ์๋๊ฐ ๋๋ฆฌ๋ค |
๋๋ค ์ข์ ํด์ด๋ค. ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์ฐ๋์ ๋ฐ๋ผ ์ฌ์ฉ์์ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ์ฌ์ฉํ ํด์ ์ ํํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
์ฒ์ CI / CD๋ฅผ ์ด๋ค๋ฉด Jenkins๋ฅผ ํ๋๊ฒ ํ๋ค ์ ์์ง๋ง, ์ถ๊ฐ ๊ธฐ๋ฅ๋ ๋ง๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํ์ดํ๋ผ์ธ์์ ๊ณต์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ด, ๋๊ท๋ชจ ์์คํ ์ ์ฌ์ฉํ๋ค๋ฉด Jenkins๊ฐ ์ ๋นํ ๊ฒ ๊ฐ๋ค.
ํ์ง๋ง, ์๊ท๋ชจ ํ๋ก์ ํธ๋, ๋ฐฐํฌ๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ฒ์ด ์ฃผ ๋ชฉํ๋ผ๋ฉด Github action์ด ์ฌ์ฉํ๊ธฐ๋ ์ฝ๊ณ , ํธ๋ฆฌํ๋ค.
reference
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
https://stackshare.io/stackups/github-actions-vs-jenkins-x
'๐ณ์ธํ๋ผ > Jenkins' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (4) (0) | 2024.05.13 |
---|---|
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (3) (0) | 2024.05.13 |
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (2) (0) | 2024.05.13 |
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (1) (0) | 2024.05.13 |