์ง๋ XNUMX๋ ๋์ ์ง์์ ์ธ ํตํฉ(Continuous Integration, CI) ๋ฐ ์ง์์ ์ธ ๋ฐฐํฌ(Continuous Delivery, CD)๋ฅผ ์ํ ๋๊ตฌ ๊ฐ๋ฐ์ ์๋นํ ๋ฐ์ ์ด ์์์ต๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ๊ณผ ์ด์(Development Operations, DevOps)์ ํตํฉํ๋ ๊ธฐ์ ์ ๋ฐ์ ์ผ๋ก CI/CD ๋๊ตฌ์ ๋ํ ์์๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ์ต๋๋ค. ๊ธฐ์กด ์๋ฃจ์ ์ ์ง์์ ์ผ๋ก ๊ฐ์ ๋๊ณ ์์ผ๋ฉฐ ์๋์ ๋ฐ ๋ง์ถ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ผ๋ฉฐ ์ ๋ฒ์ ์ด ์ถ์๋๊ณ ํ์ง ๋ณด์ฆ ์ํํธ์จ์ด (Quality Assurance, QA) ์ธ๊ณ์์ ๋ง์ ์ ์ ํ์ด ์ง์์ ์ผ๋ก ๋ฑ์ฅํ๊ณ ์์ต๋๋ค. ์ด์ฒ๋ผ ์ ํ์ ํญ์ด ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๊ฒ์ ์ฌ์ด ์ผ์ด ์๋๋๋ค.
๊ธฐ์กด์ ๋ชจ๋ CI/CD ๋๊ตฌ ์ค์์ ์ด ๋ถ์ผ์์ ๋ฌด์์ธ๊ฐ๋ฅผ ์ฐพ๋ ์ฌ๋์ด๋ผ๋ฉด ๋ฐ๋์ ์ฃผ๋ชฉํด์ผ ํ ๋ ๊ฐ์ง ํ๋ก์ ํธ๊ฐ ์๋ค. GitLab ํ๋ซํผ์ ์ผ๋ถ์ธ Jenkins์ GitLab CI/CD ๋๊ตฌ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. Jenkins๋ ๊ทธ ์ด์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ํ ์ ํ์ ๋ํ ๋ฆฌ๋ทฐ์ ์ฌ์ฉ์๊ฐ ๋ถ์ฌํ ํ๊ฐ๋ฅผ ์ถ์ ํ๋ G2 ํ๋ซํผ์ ๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์์ ํ๊ท ๋ฑ๊ธ์
๋๋ค.
๋ค๋ฅธ ์ ์ฌํ ํ๋ซํผ๊ณผ ๋น๊ตํ์ฌ Jenkins์ ์ธ๊ธฐ์ ๋ํด ์ด์ผ๊ธฐํ๋ฉด Travis CI์ Jenkins ํ๋ซํผ์ ๋น๊ตํ๋ ๊ธฐ์ฌ๋ฅผ ๊ฒ์ํ๊ณ ์ค๋ฌธ ์กฐ์ฌ๋ฅผ ์ค๋นํ์ต๋๋ค. 85๋ช ์ ์ฌ์ฉ์๊ฐ ์ฐธ์ฌํ์ต๋๋ค. ์๋ต์๋ค์ ๊ฐ์ฅ ๋ง์์ ๋๋ CI/CD ๋๊ตฌ๋ฅผ ์ ํํ๋ผ๋ ์์ฒญ์ ๋ฐ์์ต๋๋ค. 79%๋ Jenkins๋ฅผ ์ ํํ๊ณ 5%๋ Travis CI๋ฅผ ์ ํํ์ผ๋ฉฐ 16%๋ ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ ํธํ๋ค๊ณ ๋งํ์ต๋๋ค.
ะ ะตะทัะปััะฐัั ะพะฟัะพัะฐ
๋ค๋ฅธ CI/CD ๋๊ตฌ ์ค์์ GitLab CI/CD๊ฐ ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ๋์์ต๋๋ค.
DevOps์ ๊ด์ฌ์ด ์๋ค๋ฉด ํ๋ก์ ํธ์ ์ธ๋ถ ์ฌํญ, ์์ฐ ๋ฐ ๊ธฐํ ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํ์ฌ ์ ์ ํ ๋๊ตฌ๋ฅผ ์ ์คํ๊ฒ ์ ํํด์ผ ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ํ์ ํ ์ ์๋๋ก Jenkins์ GitLab CI/CD๋ฅผ ๊ฒํ ํ ์์ ์ ๋๋ค. ์ด๊ฒ์ ์ฌ๋ฐ๋ฅธ ์ ํ์ ํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ํจ์ค ์๊ฐ
Jenkins ๊ฐ๋ฐ์๋ Kubernetes ํ๊ฒฝ์์ ์๋ํ๋๋ก ์ค๊ณ๋ Jenkins X๋ผ๋ ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. Jenkins X๋ DevOps ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๊ธฐ ์ํด Helm, Jenkins CI/CD ์๋ฒ, Kubernetes ๋ฐ ๊ธฐํ ๋๊ตฌ๋ฅผ ํตํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๊ธฐ์์๋ GitOps๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Jenkins์ ์ฅ์ ์ค ํ๋๋ ์คํฌ๋ฆฝํธ๊ฐ ๋งค์ฐ ์ ๊ตฌ์กฐํ๋๊ณ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฝ๊ธฐ ์ฝ๋ค๋ ์ฌ์ค์ ๋๋ค. Jenkins ํ์ Jenkins์ ๋ค์ํ ๊ธฐ์ ์ ์ํธ ์์ฉ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ฝ 1000๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ์๋ฅผ ๋ค์ด ๋ค์ํ ํ์ ์์คํ ์ ์ฐ๊ฒฐํ ์ ์๋ ์ธ์ฆ ์์คํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Jenkins ํ์ดํ๋ผ์ธ์ด ์๋ํ๋ ๋์ ํน์ ์์ ๋จ๊ณ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๊ฐ ๋จ๊ณ์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๊ด์ฐฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋์ด ๋ชจ๋ ๊ฒ์ ํน์ ๊ทธ๋ํฝ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํฐ๋ฏธ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ณผ ์ ์์ต๋๋ค.
์ ํจ์ค์ ํน์ง
Jenkins์ ์ ์๋ ค์ง ๊ธฐ๋ฅ ์ค์๋ ์ค์ ์ฉ์ด์ฑ, ๋ค์ํ ์์ ์ ๋์ ์์ค์ ์๋ํ ๋ฐ ์ฐ์ํ ๋ฌธ์ํ๊ฐ ์์ต๋๋ค. DevOps ์์ ํด๊ฒฐ์ ๋ํด ์ด์ผ๊ธฐํ๋ฉด Jenkins๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ ํธ ์ฒ๋ฆฌ์ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ๋ฉด๋ฐํ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์๋ ๋งค์ฐ ์์ ์ ์ธ ๋๊ตฌ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ค๋ฅธ CI/CD ๋๊ตฌ์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. Jenkins์ ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ ๋ํด ์ด์ผ๊ธฐํด ๋ด ์๋ค.
โ1. ๋ฌด๋ฃ, ์คํ ์์ค, ๋ค์ค ํ๋ซํผ ์ง์
Jenkins๋ macOS, Windows ๋ฐ Linux ํ๋ซํผ์์ ์คํํ ์ ์์ต๋๋ค. ๋ํ ์๋ํ๋ ์์
์ ๊ท ์ผํ๊ณ ๋น ๋ฅธ ์คํ์ ๊ตฌ์ฑํ ์ ์๋ Docker ํ๊ฒฝ์์๋ ์๋ํ ์ ์์ต๋๋ค. ์ด ๋๊ตฌ๋ Apache Tomcat ๋ฐ GlassFish์ ๊ฐ์ Java ์ง์ ์ปจํ
์ด๋์์ ์๋ธ๋ฆฟ์ผ๋ก๋ ์คํํ ์ ์์ต๋๋ค. ์ ์ฑ์ ์ผ๋ก Jenkins ์ค์น
โ2. ํ๋ฌ๊ทธ์ธ ์ํ๊ณ ๊ฐ๋ฐ
Jenkins ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ ๋ค๋ฅธ CI/CD ๋๊ตฌ์ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ณด๋ค ํจ์ฌ ๋ ์ฑ์ํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ํ์ฌ Jenkins์ฉ ํ๋ฌ๊ทธ์ธ์ 1500๊ฐ๊ฐ ๋์ต๋๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ์๋ํํ ์ ์๋๋ก ๋์์ ์ฃผ์ด ๊ด๋ฒ์ํ ์์
์ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ ํํ ์ ์๋ ํ๋ถํ ๋ฌด๋ฃ ํ๋ฌ๊ทธ์ธ์ Jenkins๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ๋น์ผ ์ ๋ฃ ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์
ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ฐ๋ฅ์ฑ์ด์๋ค
โ3. ์ฌ์ด ์ค์น ๋ฐ ์ค์
Jenkins๋ ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ์๋นํ ์ฝ์ต๋๋ค. ๋์์ ์์คํ ์ ๋ฐ์ดํธ ํ๋ก์ธ์ค๋ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ์ฌ๊ธฐ์์ Jenkins ์ค์น ๋ฐ ๊ตฌ์ฑ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ฐพ์ ์ ์์ผ๋ฏ๋ก ๋ฌธ์์ ํ์ง์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
โ4. ์น์ ํ ์ปค๋ฎค๋ํฐ
์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด Jenkins๋ ์๋ง์ ํ๋ฌ๊ทธ์ธ์ ํฌํจํ๋ ์ํ๊ณ์ธ ์คํ ์์ค ํ๋ก์ ํธ์ ๋๋ค. Jenkins๋ฅผ ์ค์ฌ์ผ๋ก ๋๊ท๋ชจ ์ฌ์ฉ์ ๋ฐ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ๋ฐ๋์ด ํ๋ก์ ํธ ๊ฐ๋ฐ์ ๋์ต๋๋ค. ์ปค๋ฎค๋ํฐ๋ Jenkins์ ๋ฐ์ ์ ์ด๋๋ ์์ ์ค ํ๋์ ๋๋ค.
โ5. REST API์ ๊ฐ์ฉ์ฑ
Jenkins๋ก ์์
ํ๋ ๋์ ์์คํ
์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ REST API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์คํ
์ ๋ํ ์๊ฒฉ ์ก์ธ์ค๋ฅผ ์ํ API๋ XML, JSONP๋ฅผ ์ง์ํ๋ JSON, Python์ ์ธ ๊ฐ์ง ๋ฒ์ ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
โ6. ์์ ์ ๋ณ๋ ฌ ์คํ ์ง์
Jenkins๋ DevOps ์์ ์ ๋ณ๋ ฌํ๋ฅผ ์ง์ํฉ๋๋ค. ๊ด๋ จ ๋๊ตฌ์ ์ฝ๊ฒ ํตํฉ๋๊ณ ์์ ๊ฒฐ๊ณผ์ ๋ํ ์๋ฆผ์ ๋ฐ์ ์ ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋ณ๋ ฌ ๋น๋๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฝ๋ ํ ์คํธ๋ฅผ ๊ฐ์ํํ ์ ์์ต๋๋ค.
โ7. ๋ถ์ฐ ํ๊ฒฝ์์์ ์์ ์ง์
Jenkins๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ๋น๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์์ผ๋ฉฐ ํ๋์ ๋ง์คํฐ Jenkins ์๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ฌ๋ ์ด๋ธ ์์คํ ์ด ์๋ ์์ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฌ๋ ์ด๋ธ ๋จธ์ ์ ๋ค์ํ ํ๊ฒฝ์์ ํ๋ก์ ํธ ํ ์คํธ๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ ์ํฉ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ Jenkins๋ฅผ ๋ค๋ฅธ ์ ์ฌํ ํ๋ก์ ํธ์ ์ฐจ๋ณํํฉ๋๋ค.
๊น๋ฉ ์๊ฐ
GitLab CI/CD๋ ์๋ ๋ ๋ฆฝ ์คํํ ํ๋ก์ ํธ๋ก ์ถ์๋์์ง๋ง 2015๋ ์ ์ด ๋๊ตฌ ์ธํธ๊ฐ GitLab 8.0์ ํตํฉ๋์์ต๋๋ค. ๋จ์ผ GitLab CI/CD ์๋ฒ๋ 25000๋ช ์ด์์ ์ฌ์ฉ์๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฉ์ฑ์ด ๋์ ์์คํ ์ ๋ง๋ค ์ ์์ต๋๋ค.
GitLab CI/CD ๋ฐ ์ฃผ์ GitLab ํ๋ก์ ํธ๋ Ruby ๋ฐ Go๋ก ์์ฑ๋์์ต๋๋ค. ๊ทธ๋ค์ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. GitLab CI/CD๋ CI/CD ๋๊ตฌ์ ์ผ๋ฐ์ ์ธ ๊ธฐ๋ฅ ์ธ์๋ ์์ ์ผ์ ๊ณผ ๊ด๋ จ๋ ์ถ๊ฐ ๊ธฐ๋ฅ๋ ์ง์ํฉ๋๋ค.
GitLab CI/CD๋ฅผ ํ๋ก์ ํธ์ ํตํฉํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. GitLab CI/CD๋ฅผ ์ฌ์ฉํ ๋ ํ๋ก์ ํธ ์ฝ๋ ์ฒ๋ฆฌ ํ๋ก์ธ์ค๋ ๋จ๊ณ๋ก ๋๋๋ฉฐ ๊ฐ ๋จ๊ณ๋ ํน์ ์์๋ก ์ํ๋๋ ์ฌ๋ฌ ์์ ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค. ์์ ์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค.
์์ ์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ต๋๋ค. ๋จ๊ณ ๋ฐ ์์ ์์๋ฅผ ์ค์ ํ๊ณ ๋๋ฉด CI/CD ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๊ฒ์ ๋๋ค. ์์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ์งํ ์ํฉ์ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก GitLab CI / CD๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ํธ๋ฆฌํ๋ฉฐ ์๋ง๋ ๋ค๋ฅธ ์ ์ฌํ ๋๊ตฌ๋ณด๋ค ๋ ํธ๋ฆฌํ ๊ฒ์ ๋๋ค.
GitLab CI/CD ๋ฐ GitLab์ ๊ธฐ๋ฅ
GitLab CI/CD๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ DevOps ๋๊ตฌ ์ค ํ๋์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ ๊ณ ํ์ง ๋ฌธ์๋ก ๊ตฌ๋ณ๋๋ฉฐ ๊ทธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ํธ๋ฆฌํฉ๋๋ค. ์์ง GitLab CI/CD์ ์ต์ํ์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์ด ๋๊ตฌ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ํตํด ๋ฌด์์ ๊ธฐ๋ํ ์ ์๋์ง์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ ์ค ๋ง์ ๋ถ๋ถ์ด GitLab CI/CD๊ฐ ํตํฉ๋ GitLab ํ๋ซํผ ์์ฒด์ ๊ด๋ จ๋์ด ์๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค.
โ1. ์ธ๊ธฐ
GitLab CI/CD๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋น๊ต์ ์๋ก์ด ๋๊ตฌ์ ๋๋ค. GitLab CI/CD๋ ์๋ํ๋ ํ ์คํธ ๋ฐ ์ํํธ์จ์ด ๋ฐฐํฌ์ ์ฌ์ฉ๋๋ ๋งค์ฐ ์ธ๊ธฐ ์๋ CI/CD ๋๊ตฌ๊ฐ ์ฒ์ฒํ ๋์์ต๋๋ค. ์ค์ ์ด ๊ฐ๋จํฉ๋๋ค. ๋ํ GitLab ํ๋ซํผ์ ๋ด์ฅ๋ ๋ฌด๋ฃ CI/CD ๋๊ตฌ์ ๋๋ค.
โ2. GitLab Pages ๋ฐ Jekyll ์ง์
Jekyll์ GitLab ํ์ด์ง ์์คํ
๋ด์์ GitLab ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์
๋๋ค. ์์คํ
์ ์์ค ์๋ฃ๋ฅผ ๊ฐ์ ธ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ์ฑํ ์ ์ ์ฌ์ดํธ๋ฅผ ์์ฑํฉ๋๋ค. ํ์ผ์ ํธ์งํ์ฌ ์ด๋ฌํ ์ฌ์ดํธ์ ๋ชจ์๊ณผ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์์ต๋๋ค. _config.yml
, ์งํฌ์์ ์ฌ์ฉ.
โ3. ํ๋ก์ ํธ ๊ณํ ๊ธฐ๋ฅ
ํ๋ก์ ํธ ๋จ๊ณ๋ฅผ ๊ณํํ๋ ๊ธฐ๋ฅ ๋๋ถ์ ๋ฌธ์ ๋ฐ ๊ทธ๋ฃน ์ถ์ ์ ํธ์์ฑ์ด ๋์์ง๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ ํธ ์์ ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๊ณ ํน์ ๋ ์ง์ ๊ตฌํ์ ๊ณํํ ์ ์์ต๋๋ค.
โ4. CI ๋ฌ๋์ ์๋ ์ค์ผ์ผ๋ง
ํน์ ์์ ์ ์ํํ๋ ๋ฌ๋์ ์๋ ํ์ฅ ๋๋ถ์ ์๋ฒ ์ฉ๋์ ์๋ํ๋ ๋น์ฉ์ ํฌ๊ฒ ์ ์ฝํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํนํ ํ๋ก์ ํธ๊ฐ ๋ณ๋ ฌ๋ก ํ ์คํธ๋๋ ํ๊ฒฝ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ํ ์ด๋ ์ฌ๋ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ค์ํฉ๋๋ค.
โ5. ๋ฌธ์ ์ถ์ ๋๊ตฌ
GitLab์ ๊ฐ๋ ฅํ ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅ์ ๋ง์ ์คํ ์์ค ํ๋ก์ ํธ๊ฐ ํ๋ซํผ์ ์ฌ์ฉํ๋๋ก ์ด๋์์ต๋๋ค. GitLab CI/CD๋ ์๋ก ๋ค๋ฅธ ์ฝ๋ ๋ธ๋์น์ ๋ณ๋ ฌ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค. ํ ์คํธ ๊ฒฐ๊ณผ๋ ์์คํ ์ธํฐํ์ด์ค์์ ํธ๋ฆฌํ๊ฒ ๋ถ์๋ฉ๋๋ค. ์ด๊ฒ์ GitLab CI/CD๋ฅผ Jenkins์ ์ฐจ๋ณํํฉ๋๋ค.
โ6. ์ ์ฅ์์ ๋ํ ์ก์ธ์ค ์ ํ
GitLab ํ๋ซํผ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ก์ธ์ค ์ ํ์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฆฌํฌ์งํ ๋ฆฌ์ ํ๋ก์ ํธ์์ ๊ณต๋ ์์ ์ ์ํํ๋ ์ฌ์ฉ์์๊ฒ๋ ํด๋น ์ญํ ์ ์ ํฉํ ๊ถํ์ ํ ๋นํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํนํ ๊ธฐ์ ํ๋ก์ ํธ์ ํด๋น๋ฉ๋๋ค.
โ7. ์ ๊ทน์ ์ธ ์ปค๋ฎค๋ํฐ ์ง์
์ด ํ๋ซํผ๊ณผ ๋๊ตฌ, ํนํ GitLab CI/CD์ ๊ฐ๋ฐ์ ๊ธฐ์ฌํ๋ GitLab์ ์ค์ฌ์ผ๋ก ํ๋ฐํ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ๋ฐ๋์์ต๋๋ค. ํนํ GitLab CI/CD์ GitLab์ ๊ธด๋ฐํ ํตํฉ ๋๋ถ์ GitLab CI/CD๋ก ์์ ํ ๋ ๋ฐ์ํ๋ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
โ8. ๋ค์ํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ง์
GitLab CI/CD๋ GitLab ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์คํ ๋ ์ฝ๋ ์ด์์ผ๋ก ์์ ํ ์ ์๋ ์์คํ ์ ๋๋ค. ์๋ฅผ ๋ค์ด GitHub ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฝ๋๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ GitLab CI/CD๋ฅผ ์ฌ์ฉํ์ฌ GitLab ๊ธฐ๋ฐ์ผ๋ก CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Jenkins์ GitLab CI/CD ๋น๊ต
Jenkins์ GitLab CI/CD๋ CI/CD ํ์ดํ๋ผ์ธ์ ์ํํ๊ฒ ์คํํ ์ ์๋ ๋งค์ฐ ์ข์ ๋๊ตฌ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ ๋น๊ตํด๋ณด๋ฉด ์ฌ๋ฌ ๋ฉด์์ ์ ์ฌํ์ง๋ง ์ด๋ค ๋ฉด์์๋ ์๋ก ๋ค๋ฅด๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค.
ํน์ฑ
์ ํจ์ค
GitLab CI / CD
์คํ ์์ค ๋๋ ํ์ ์์ค
์คํ ์์ค
์คํ ์์ค
์ค์น
ํ์์.
์ด๊ฒ์ GitLab ํ๋ซํผ์ ๊ธฐ๋ณธ ์ ๊ณต ๊ธฐ๋ฅ์ด๋ฏ๋ก ํ์ํ์ง ์์ต๋๋ค.
๋
ํนํ ๊ธฐ๋ฅ
ํ๋ฌ๊ทธ์ธ ์ง์.
๋ฒ์ ๊ด๋ฆฌ ์์คํ
๊ณผ์ ๊ธด๋ฐํ ํตํฉ.
์ง์
๊ฒฐ์.
์ฌ์ฉ ๊ฐ๋ฅ.
์ค์น ๋ฐ ๊ตฌ์ฑ
์ด๋ ค์์ด ๋ฐ์ํ์ง ์์ต๋๋ค
์ด๋ ค์์ด ๋ฐ์ํ์ง ์์ต๋๋ค
์์คํ
์์ฒด ๋ฐฐํฌ
์ด๊ฒ์ด ์์คํ
์ ์ฌ์ฉํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค.
์ง์๋ฉ๋๋ค.
CI/CD ํ์ดํ๋ผ์ธ ๋ง๋ค๊ธฐ
Jenkins ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ์ฌ ์ง์๋ฉ๋๋ค.
์ง์๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
๊ฒฐ์.
์ฌ์ฉ ๊ฐ๋ฅ.
์ํ๊ณ
1000๊ฐ๊ฐ ๋๋ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค.
์ด ์์คํ
์ GitLab ๋ด์์ ๊ฐ๋ฐ ์ค์
๋๋ค.
API
๊ณ ๊ธ API ์์คํ
์ ์ง์ํฉ๋๋ค.
ํ๋ก์ ํธ์ ๋ ๊น์ด ํตํฉํ๊ธฐ ์ํ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ง์
์ฌ์ฉ ๊ฐ๋ฅ.
์ฌ์ฉ ๊ฐ๋ฅ.
๋ค๋ฅธ ๋๊ตฌ์ ํตํฉ
๋ค๋ฅธ ๋๊ตฌ ๋ฐ ํ๋ซํผ๊ณผ์ ํตํฉ์ด ์ง์๋ฉ๋๋ค(Slack, GitHub).
ํ์ฌ ์์คํ
, ํนํ GitHub ๋ฐ Kubernetes์์ ํตํฉ์ ์ํ ๋ง์ ๋๊ตฌ.
์ฝ๋ ํ์ง ๊ด๋ฆฌ
์ง์๋จ - SonarQube ํ๋ฌ๊ทธ์ธ ๋ฐ ๊ธฐํ ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ.
์ง์๋ฉ๋๋ค.
Jenkins์ GitLab CI/CD์ ์ฐจ์ด์
Jenkins์ GitLab CI/CD๋ฅผ ์ค๋ช ํ๊ณ ๋น๊ตํ ํ ์ด๋ฌํ DevOps ๋๊ตฌ ๊ฐ์ ์ฐจ์ด์ ์ ์ด์ ์ ๋ง์ถ๊ฒ ์ต๋๋ค. ์ด๋ฌํ ์ฐจ์ด์ ์ ์๋ฉด ์ด๋ฌํ ๋๊ตฌ ์ค ํ๋๋ฅผ ๋ค๋ฅธ ๋๊ตฌ๋ณด๋ค ์ ํธํ๋ ์ฌ๋๋ค์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- GitLab CI/CD๋ Git ์ ์ฅ์๋ฅผ ์์ ํ ์ ์ดํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ถ๊ธฐ ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ ๊ด๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Jenkins๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํจ๊ป ์๋ํ ์ ์์ง๋ง GitLab CI/CD์ ๋์ผํ ์์ค์ ์ ์ด๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
- Jenkins๋ ๋ฌด๋ฃ ์คํ ์์ค ํ๋ก์ ํธ์ ๋๋ค. ์ ํํ ์ฌ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ GitLab CI/CD๋ GitLab ํ๋ซํผ์ ํฌํจ๋์ด ์๋ ํดํค ์๋ฃจ์ ์ ๋๋ค.
- GitLab CI/CD๋ ํ๋ก์ ํธ ์์ค์์ ์๋ํ๋ ๊ณ ๊ธ ์์ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ง์ํฉ๋๋ค. Jenkins์ ์ด์ชฝ์ ๋ ๊ฐ๋ฐ๋์์ต๋๋ค.
Jenkins ๋ฐ GitLab CI/CD: ๊ฐ์ ๋ฐ ์ฝ์
์ด์ Jenkins์ GitLab CI/CD์ ๋ํ ์์ด๋์ด๊ฐ ์๊ฒผ์ต๋๋ค. ์ด์ ์ด๋ฌํ ๋๊ตฌ์ ๋ํด ๋ ์ ์ ์ ์๋๋ก ํด๋น ๋๊ตฌ์ ์ฅ๋จ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ์ํ ๋๊ตฌ๋ฅผ ์ด๋ฏธ ๊ฒฐ์ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ์น์ ์ ํตํด ์์ ์ ํ ์คํธํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
โ์ ํจ์ค์ ๊ฐ์
- ๋ง์ ์์ ํ๋ฌ๊ทธ์ธ.
- ๋๊ตฌ ์ค์น๋ฅผ ์๋ฒฝํ๊ฒ ์ ์ดํฉ๋๋ค.
- ๋ฌ๋์ ๊ฐ๋จํ ๋๋ฒ๊น .
- ์ฌ์ด ๋ ธ๋ ์ค์ .
- ์ฌ์ด ์ฝ๋ ๋ฐฐํฌ.
- ์์ฃผ ์ข์ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ ์์คํ .
- ์ ์ฐ์ฑ๊ณผ ๋ค์์ฑ.
- ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค.
- ์์คํ ์ ์ง๊ด์ ์ธ ์์ค์์ ์ดํดํ ์ ์์ต๋๋ค.
โ์ ํจ์ค์ ์ฝ์
- ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ธฐ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค.
- ์๊ท๋ชจ ํ๋ก์ ํธ์์ Jenkins๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ง์ ๊ตฌ์ฑํ๋ ๋ฐ ํ์ํ ์๊ฐ์ด ์ง๋์น๊ฒ ๊ธธ์ด์ง ์ ์์ต๋๋ค.
- CI/CD ์ฒด์ธ์ ๋ํ ์ผ๋ฐ์ ์ธ ๋ถ์ ์ ๋ณด๊ฐ ๋ถ์กฑํฉ๋๋ค.
โGitLab CI/CD์ ์ฅ์
- Docker์ ์ ํตํฉ๋ฉ๋๋ค.
- ๋ฌ๋์ ๊ฐ๋จํ ์ค์ผ์ผ๋ง.
- CI/CD ํ์ดํ๋ผ์ธ ๋จ๊ณ์ ์ผ๋ถ์ธ ์์ ์ ๋ณ๋ ฌ ์คํ.
- ์์ ๊ด๊ณ๋ฅผ ์ค์ ํ ๋ ๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฌ๋์ ๋ณ๋ ฌ ์คํ ๊ฐ๋ฅ์ฑ์ผ๋ก ์ธํ ๋์ ์์ค์ ํ์ฅ์ฑ.
- ์์ ์ถ๊ฐ ์ฉ์ด์ฑ.
- ๊ฐ๋จํ ์ถฉ๋ ํด๊ฒฐ.
- ์์ ์ ์ธ ๋ณด์ ์์คํ .
โGitLab CI/CD์ ๋จ์
- ๊ฐ ์์ ์ ๋ํด ์ํฐํฉํธ๋ฅผ ์ค๋ช ํ๊ณ ์ ๋ก๋/๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.
- ๋ถ๊ธฐ๊ฐ ์ค์ ๋ก ๋ณํฉ๋๊ธฐ ์ ์ ๋ณํฉ ๊ฒฐ๊ณผ๋ฅผ ํ ์คํธํ ์ ์์ต๋๋ค.
- CI/CD ํ์ดํ๋ผ์ธ์ ๋จ๊ณ๋ฅผ ์ค๋ช ํ ๋ ๊ฐ๋ณ ๋จ๊ณ๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ ์์ง ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ฒฐ๊ณผ
Jenkins์ GitLab CI/CD ๋ชจ๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ๋ฌด์์ ์ ํํ ๊ฒ์ธ๊ฐ์ ๋ํ ๋ต์ ํน์ ํ๋ก์ ํธ์ ํ์์ ํน์ฑ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ค๋ ๊ฒํ ํ ๊ฐ CI/CD ๋๊ตฌ๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ง๋ง ํน์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋์์ Jenkins๋ ๋ ๋ฆฝ ์คํํ ๋๊ตฌ์ด๋ฉฐ GitLab CI/CD๋ ์ฝ๋ ํ์ ์ ์ํด ์ค๊ณ๋ ํ๋ซํผ์ ์ผ๋ถ์ ๋๋ค.
CI / CD ์์คํ ์ ์ ํํ ๋ ๊ทธ ๊ธฐ๋ฅ ์ธ์๋ ๊ด๋ จ ๋น์ฉ๊ณผ ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ DevOps ์์ง๋์ด๊ฐ ์์ ํ๋ ๋ฐ ์ ํํ ๋ฌด์์ ์ฌ์ฉํ๋์ง ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ด๋ค CI/CD ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ๋๊น?
์ถ์ฒ : habr.com