ETC.
[Jenkins] Jenkins์ CI/CD์ ๊ฐ๋
carsumin
2024. 8. 6. 23:30

Jenkins๋?
- ์คํ ์์ค ์๋ํ ์๋ฒ๋ก, ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ ํธ์์ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ๋ฑ์ ์๋ํ
- ๋ค์ํ ํ๋ฌ๊ทธ์ธ ์ง์ํจ
- ๊ฐ๋ฐ์์ ํ์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ณ ์ง์์ ์ผ๋ก ํตํฉํ๊ณ ๋น๋์ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ฌ ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋์ ํ์ง์ ํฅ์์ํค๋ ๊ฒ์ด ๋ชฉํ
Jenkins์ ์ฃผ์ ํน์ง
1. ์คํ ์์ค์ ์ปค๋ฎค๋ํฐ ์ง์
- ์คํ ์์ค์ด๊ธฐ ๋๋ฌธ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ๋ ์๋ง์ ํ๋ฌ๊ทธ์ธ์ด ์กด์ฌํ๋ฉฐ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
2. ๋ค์ํ ํ๋ฌ๊ทธ์ธ
- ์ฌ๋ฌ๊ฐ์ง์ ํ๋ฌ๊ทธ์ธ์ ํตํด ๊ฑฐ์ ๋ชจ๋ ๊ฐ๋ฐ ํด๊ณผ ํตํฉ๋ ์ ์์
- ์์ค ์ฝ๋ ๊ด๋ฆฌ ๋๊ตฌ (Git, SVN)
- ๋น๋ ๋๊ตฌ (Maven, Gradle)
- ์ปจํ ์ด๋ ํ๋ซํผ (Docker)
- ํ ์คํธ ํ๋ ์์ํฌ (JUnit, TestNG)
- ๋ฐฐํฌ ๋๊ตฌ (Ansible, Kubernetes)
3. ํ์ดํ๋ผ์ธ
- Jenkins ํ์ดํ๋ผ์ธ์ CI/CD ํ๋ก์ธ์ค๋ฅผ ์ฝ๋๋ก ์ ์ํ ์ ์๋ ๊ธฐ๋ฅ
- Jenkinsfile์ด๋ผ๋ ์คํฌ๋ฆฝํธ ํ์ผ์ ํตํด ๋ณต์กํ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ๊ณผ์ ์ ํ๋์ ์ฐ์์ ์ธ ํ๋ฆ์ผ๋ก ์ค์
4. ๋ถ์ฐ ๋น๋ ์์คํ
- Jenkins๋ Master-Slave ์ํคํ ์ณ๋ฅผ ํตํด ๋ถ์ฐ ๋น๋ ์์คํ ์ ์ง์ํจ
- Master๋ ๋น๋๋ฅผ ์กฐ์ ํ๊ณ Slave ๋ ธ๋๋ ์ค์ ๋น๋ ์์ ์ ์ํ
- ์ฌ๋ฌ ๋ ธ๋์์ ๋ณ๋ ฌ๋ก ์์ ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ, ๋น๋ ์๋ ํฅ์
5. ๊ฐ๋ ฅํ ์๋ฆผ ๋ฐ ํผ๋๋ฐฑ ์์คํ
- Jenkins๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฉ์ผ์ด๋ Jira๋ฑ์ ํตํด ์๋ฆผ์ผ๋ก ์ ๋ฌํจ
- ๋น๋ ์คํจ๋ ํ ์ค๋ฅผ ์คํจํ์ ๊ฒฝ์ฐ์ ์๋์ผ๋ก ๋กค๋ฐฑํ๊ฑฐ๋ ํน์ ์์ ์ ์ํํ๋๋ก ์ค์ ๊ฐ๋ฅ
6. ์ ์ฐํ ์ค์
- Jenkins๋ ๋ค์ํ ์ค์ ์ต์ ์ ์ ๊ณต
- UI๋ฅผ ํตํด ์ง๊ด์ ์ผ๋ก ์ค์ ํ ์ ์์๋ฟ๋ง ์๋๋ผ ์ฝ๋๋ก ์ธ๋ถ ์ค์ ๊ด๋ฆฌ๋ ๊ฐ๋ฅ
Jenkins์ ์ํคํ ์ณ
1. Jenkins Master
- ์ ์ฒด Jenkins ์์คํ ์ ํต์ฌ ๋ถ๋ถ
- ๋น๋ ์์ฒญ์ ์์ ํ๊ณ ์ด๋ฅผ ์กฐ์ ํ๋ ์ญํ
- UI ์ ๊ณต, ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ, ๋น๋ ์ค์ผ์ค๋ง, ๋ถ์ฐ๋ Slave ๋ ธ๋๋ก ์์ ํ ๋น ๋ด๋น
2. Jenkins Slave
- Master์ ์ํด ํ ๋น๋ ๋น๋ ์์ ์ ์ค์ ๋ก ์คํํ๋ ๋ ธ๋
- ๋ค์ํ ํ๊ฒฝ์์ ์ด์๋จ
3. Jenkinsfile
- Jenkins ํ์ดํ๋ผ์ธ์ ์ฝ๋๋ก ์ ์ํ๋ ํ์ผ
- ์ด ํ์ผ์ ํตํด ๋น๋, ํ ์คํธ, ๋ฐฐํฌ์ ๊ฐ ๋จ๊ณ๋ฅผ ๋ช ํํ ์ ์ํจ
- Declarative, Scripted ๋ ๊ฐ์ง ๋ฌธ๋ฒ์ผ๋ก ์์ฑ
Jenkins์ ์ฃผ์ ๊ธฐ๋ฅ
1. CI/CD ํ์ดํ๋ผ์ธ ์๋ํ
- Jenkins๋ ์ฝ๋ ์ปค๋ฐ๋ถํฐ ๋ฐฐํฌ๊น์ง์ ๋ชจ๋ ๊ณผ์ ์ ์๋ํ
- ๊ฐ๋ฐ์ฃผ๊ธฐ๋ฅผ ๋จ์ถ์ํค๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ ์์ ์ค์ฌ์ค
2. ์ ์ฐํ build trigger
- ๋ค์ํ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐ ํ ์ ์์
3. ๊ฐ๋ ฅํ ๋ก๊ทธ ๋ฐ ๋ชจ๋ํฐ๋ง
- ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ๊ณผ์ ์ ๋ก๊ทธ๋ฅผ ์์ธํ ๊ธฐ๋กํจ
- ๋น๋ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํ์ฌ ํ๋ก์ ํธ ์ํ๋ฅผ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅ
4. ๋ค์ํ ํ๊ฒฝ ์ง์
- ๋ก์ปฌ๋ฟ๋ง ์๋๋ผ ํด๋ผ์ฐ๋ ํ๊ฒฝ(AWS, Azure ๋ฑ) ์์๋ Jenkins ์คํํ๊ณ ๋ค์ํ ๋๊ตฌ์ ์ฐ๋ ๊ฐ๋ฅ
Jenkins ์ฌ์ฉ์ ๊ณ ๋ ค์ฌํญ
1. ์ฑ๋ฅ
- ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๊ฑฐ๋ ๋น๋๊ฐ ๋ณต์กํด์ง๋ฉด Jenkins ์ฑ๋ฅ์ด ๋ฌธ์ ๊ฐ ๋ ์ ์์
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋๋ฅผ ๋ถ์ฐ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ ๋ฑ์ผ๋ก ๊ฐ์ ํ ์ ์์
2. ๋ณด์
- Jenkins๋ CI/CD ํ์ดํ๋ผ์ธ์ ํตํด ์์ค ์ฝ๋์ ๋ฐฐํฌ ํ๊ฒฝ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ฃผ์ํด์ผํจ
- ์ฌ์ฉ์ ๊ถํ ๊ด๋ฆฌ, ํ๋ฌ๊ทธ์ธ ๋ณด์, SSL ์ค์ ๋ฑ ์ ์คํ๊ฒ ๊ตฌ์ฑํด์ผํจ
3. ์ ์ง๋ณด์
- ํ๋ฌ๊ทธ์ธ ์ ๋ฐ์ดํธ๋ Jenkins ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ์ ํธํ์ฑ ๋ฌธ์ ์ ๋ํด ์ฃผ์ํด์ผ ํจ
CI/CD ๊ฐ๋
1. Continuous Integration ์ง์์ ํตํฉ
- CI๋ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ์ ์์ฃผ (์ต์ ํ๋ฃจ์ ํ ๋ฒ ์ด์) ํตํฉํ๋ ๊ฒ
- ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ํตํฉ๋จ
- Jenkins์ ๊ฐ์ CI ๋๊ตฌ์ ์ํด ์๋์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ
2. Continuous Deilvery ์ง์์ ๋ฐฐํฌ
- CD์์ ์ง์์ ๋ฐฐํฌ๋ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํตํฉ๋ ํ ์ธ์ ๋ ์ง ๋ฐฐํฌํ ์ ์๋ ์ํ๋ก ์ ์งํ๋ ๊ฒ
- ๋ฐฐํฌ๋ ์๋ํ๋์ง ์์์ง๋ง ์ธ์ ๋ ๋ฐฐํฌํ ์ ์๋ ์ํ
- ์ต์ข ๋ฆด๋ฆฌ์ฆ๋ ์๋์ผ๋ก ์ํ
3. Continuous Deployment ์ง์์ ๋ฐฐํฌ
- CI/CD ๋ง์ง๋ง ๋จ๊ณ
- ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ผ๋ก ๋ฐฐํฌ๋๋ ๊ฒ
- ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ฒ ์๋ก์ด ๊ธฐ๋ฅ ์ ๊ณตํ๋ฉฐ ๋ฐฐํฌ ์๋๋ฅผ ๋์ด๊ณ ์ ๋ขฐ์ฑ์ ์ ์งํ ์ ์๊ฒ ํจ
Jenkins์ CI/CD์ ๊ด๊ณ
- Jenkins๋ CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ