2023. 8. 2. 14:55ใSystem ์์ ์ค/DevOps
(์๋ฌธ๋์) Automating DevOps with GitLab CI/CD Pipelines: Build efficient CI/CD pipelines to verify sec... Paperback
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ GitLab Runner ์ค์น
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
์ด ์ ๊ธ์ ํตํด ์ฃผ๋๋ ๋ด๋ถ ์๋ฒ์ Gitlab(๊น๋ฉ)์ ์ค์นํ์ฌ ์ฃผ์์ด์. ํด๋น ๋ด์ฉ์ ์ด ๊ณณ์์ ํ์ธํ์ค ์ ์์ด์.
[Ubuntu] Docker gitlab ์ค์น
(์๋ฌธ๋์) Automating DevOps with GitLab CI/CD Pipelines: Build efficient CI/CD pipelines to verify sec... Paperback COUPANG www.coupang.com "์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ
junyharang.tistory.com
๊น๋ฉ ๋ฌด๋ฃ ๋ฒ์ ์ ์ด์ฉํ๋๋ผ๋ Github(๊นํ) ๋ฑ๊ณผ ๊ฐ์ด CI/CD๋ฅผ ์ด์ฉํ ์ ์๋ต๋๋ค.
๊ทธ๋์ ์ด๋ฒ์๋ ํด๋น ๋ด์ฉ์ ๋ํด ์ค์น ๋ฐ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด ๋ณผ๊ฒ์.
๐ฝ ์ค์นํ๊ธฐ
๐ฆ GitLab Runner ์ค์น
์ต์ด ์ค์น ์ GitLab Runner Working Directory (์์
๋๋ ํฐ๋ฆฌ)์ Data(๋ฐ์ดํฐ)๋ฅผ ์์์ (Persistent)๋ก ์ ์ฅํ๊ธฐ ์ํ Bind mount(๋ฐ์ธ๋ ๋ง์ดํธ) ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํด์.
์์ ๊ฐ์ด ๋ง๋ค๊ณ , ํด๋น ๋๋ ํฐ๋ฆฌ ์์ ๊ถ์ $USER๋ก ๋ณ๊ฒฝํ๊ณ , ๊ถํ์ ๋ณ๊ฒฝํด ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค docker-compose(๋์ปค ์ปดํฌ์ฆ).yml ํ์ผ์ ๋ง๋ค์ด ์ค๊ฒ์.
์ฃผ๋๋ ์์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์์ด์.
์ด์ ๊ธฐ๋ ์์ผ ๋ณผ๊ฒ์.
๊ธฐ๋์ด ์ ๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
๐ฝ ๋ฑ๋กํ๊ธฐ
๐ฆ GitLab Runner ๋ฑ๋ก
๊น๋ฉ UI์๋ Access(์ ์)ํ ์ฌ์ฉ์์ ๋ฐ๋ผ ์ธ ๊ฐ์ง ์ ํ์ Runner(๋ฌ๋)๊ฐ ์์ด์.
์ฒซ์งธ: ๊ณต์ ๋ฌ๋๋ ๊น๋ฉ ์ธ์คํด์ค์ ๋ชจ๋ ๊ทธ๋ฃน ๋ฐ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ด์. (Admin Area์ CI/CD > Runners)
๋๋ฒ์งธ: ๊ทธ๋ฃน ๋ฌ๋๋ ๊ทธ๋ฃน์ ๋ชจ๋ ํ๋ก์ ํธ์ ํ์ ๊ทธ๋ฃน์์ ์ฌ์ฉํ ์ ์์ด์. (๊ทธ๋ฃน์ Settings > CI/CD > Runners ์น์
)
์ธ๋ฒ์งธ: ํน์ ๋ฌ๋๋ ํน์ ํ๋ก์ ํธ์ ์ฐ๊ฒฐ๋์. ์ผ๋ฐ์ ์ผ๋ก ํน์ ๋ฌ๋๋ ํ๋์ ํ๋ก์ ํธ์์๋ง ์ฌ์ฉ๋์. (ํ๋ก์ ํธ์ Settings > CI/CD > Runners ์น์
)
์ฃผ๋๋ Shared Runner (๊ณต์ ๋ฌ๋) ๋ฑ๋ก ๋ฐฉ๋ฒ์ ์งํํด ๋ณผ๊ฒ์. ์ฐธ๊ณ ๋ก ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ํด์ผ ํด์.
๊น๋ฉ ์ผ์ชฝ์ ๋ณด๋ฉด ์์ ๊ฐ์ด ๋ค๋น๊ฒ์ด์
๋ฐ๊ฐ ์๋๋ฐ, Admin Area๋ก ์ ์ํด ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค CI/CD Tab์ Runner(๋ฌ๋)๋ก ๋ค์ด๊ฐ ์ค๊ฒ์.
์์ ๊ฐ์ด ๋ฌ๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ค๊ฑฐ์์.
์์ ๊ฐ์ด OS ์ข
๋ฅ๋ฅผ ์ ํํ๊ณ , Run untaged jobs๋ฅผ ์ฒดํฌํ์ฌ Tag(ํ๊ทธ) ์์ด ๋ฌ๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํด ์ค๊ฑฐ์์.
์ด๋ ๊ฒ ํ ๋ค Create Runner๋ฅผ ํด๋ฆญํ์ฌ ๋ฌ๋๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
์ด๋ ๊ฒ ํ ๋ค ๊น๋ฉ ๋ฌ๋ ์ปจํ
์ด๋์ ์ ์ ํด ์ค๋๋ค.
์์ ๊ฐ์ด ๋์ค๋ฉด ๋ช
๋ น์ด๋ฅผ ๋ณต์ฌํด์ ๊น๋ฉ ๋ฌ๋ ์ปจํ
์ด๋์ ์
๋ ฅํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ ๋ช ๋ น์ด ์ค url ๋ด์ฉ์ ๊น๋ฉ external_url ๋ด์ฉ๊ณผ ๋์ผํ๊ฒ ๋ง์ถฐ์ฃผ๊ณ , --token ๋ถ๋ถ์ ์์ ๊ฐ์ด ํ ํฐ ๊ฐ์ ์ ๋ ฅํด ์ฃผ๋ฉด ๋์.
โ Enter the GitLab instance URL: ์๋ฌด๊ฒ๋ ์
๋ ฅํ์ง ์๊ณ , Enter๋ฅผ ๋๋ฌ์ฃผ๋ฉด --url ๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
โEnter the registration token: ์๋ฌด๊ฒ๋ ์
๋ ฅํ์ง ์๊ณ , Enter๋ฅผ ๋๋ฌ์ฃผ๋ฉด --token์ด ์ค์ ๋ฉ๋๋ค.
โEnter a description for the runner: ๋ฌ๋์ ๋ํ ์ค๋ช
์ ์
๋ ฅํ๊ณ Enter๋ฅผ ๋๋ฌ์ค๋๋ค.
โEnter tags for the runner: ์๋ฌด๊ฒ๋ ์
๋ ฅํ์ง ์๊ณ , Enter๋ฅผ ๋๋ฌ์ค๋๋ค.
โEnter an executor: docker์ ์
๋ ฅํ๊ณ , Enter๋ฅผ ๋๋ฌ์ค๋๋ค.
โEnter the default Docker image: ubuntu:latest๋ฅผ ์
๋ ฅํ๊ณ , Enter๋ฅผ ๋๋ฌ์ค๋๋ค.
์์ ๊ฐ์ด ์ ์์ ์ผ๋ก ์ค์ ๋ ๊ฑธ ๋ณผ ์ ์์ด์.
์์ ๊ฐ์ด ๋์ค๋ฉด ์ ์์ด์์!
์ด์ Go to runners page ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.
์์ ๊ฐ์ด ๋ฌ๋ ๋ชฉ๋ก์ด ํ์๋๋ฉด ์ ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ฒ์ด์์.
๐ฝ ๊ตฌ์ฑํ๊ธฐ
๐ฆ GitLab Runner ๊ตฌ์ฑ
๊น๋ฉ ๋ฌ๋ ๋ฐ ๋ฑ๋ก๋ ๊ฐ๋ณ ๋ฌ๋์ ๋์์ ๋ณ๊ฒฝํ๋ ๋ถ๋ถ์ ๋ํด ์์๋ณผ๊ฒ์.
๊น๋ฉ ๋ฌ๋์ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ปจํ
์ด๋ ์์ config.toml File(ํ์ผ)์ ์์ ํด์ฃผ์ด์ผ ํด์.
๋๋ถ๋ถ ์ต์
๋ณ๊ฒฝ ์ ๊น๋ฉ ๋ฌ๋๋ฅผ ๋ค์ ์์ํ ํ์๊ฐ ์์ด์. ์ฌ๊ธฐ์๋ listen_address๋ฅผ ์ ์ธํ [[runners]] Section(์น์
)์ Parameter(ํ๋ผ๋ฏธํฐ)์ Global ์น์
์ ๋๋ถ๋ถ์ ํ๋ผ๋ฏธํฐ๊ฐ ํฌํจ๋๋ต๋๋ค.
๊น๋ฉ ๋ฌ๋๋ 3์ด๋ง๋ค ๊ตฌ์ฑ ์์ ์ฌํญ์ ํ์ธํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ๋ค์ ๋ก๋ํ๊ฒ ๋์ด ์์ด์.
๐ฆ Job Concurrency (๋์์ฑ) Configuration(์ค์ )
๊น๋ฉ ๋ฌ๋๊ฐ ๋์์ ์ฌ๋ฌ Job(์์
)์ ์คํํ ์ ์๋๋ก ์ ์ ํ๊ฒ concurrent๋ฅผ ์์ ํด ์ค ์ ์์ด์.
์๋ฅผ ๋ค์ด 4vCPU/16GiB์ธ ๊ฒฝ์ฐ concurrent = 4๋ก ์ค์ ํด ์ฃผ๋ฉด ์ข์์.
GitLab.com์ Auto-Scaling(์๋ ํ์ฅ) Shared Runner(๊ณต์ ๋ฌ๋)๋ ๋จ์ผ ์์
์ด 1 vCPU์ 3.75GiB๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ์ธ์คํด์ค์์ ์คํ๋๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๐ฆ Docker Privlieged(ํน๊ถ) Mode(๋ชจ๋) ์ค์
์๋ CI Pipeline(ํ์ดํ๋ผ์ธ - .gitlab-ci.yml)๊ณผ ๊ฐ์ด Docker-in-Docker Container(์ปจํ
์ด๋)๋ฅผ ์ฌ์ฉํ์ฌ docker build์ ๊ฐ์ Script๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ํน๊ถ ๋ชจ๋ ์ค์ ์ด ํ์ํด์.
image: docker:git
services:
- docker:dind
build:
script:
- docker build -t my-image .
- docker push my-image
[runners.docker] ์น์
์์ privileged = true๋ก ์ค์ ํด ์ค๋๋ค.
์์์ ์ด์ผ๊ธฐ ํ๋ ๋ฌ๋ Option(์ต์
)์ ์์ ํ๋ ค๋ฉด ๋ฌ๋ฒ ์์
๋๋ ํฐ๋ฆฌ (์: /data/gitlab-runner)์์ ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ , ์์ ํด ์ค ์ ์์ด์.
vim Editor(์๋ํฐ)๋ฅผ ํตํด ์์ ํ๋ ค๊ณ ํ๋๋ฐ, ์์ ๊ฐ์ด ์ค์น๊ฐ ์๋์ด ์์ด์.
๋ํ ํด๋น ์ปจํ
์ด๋๋ ๋ฐ๋น์ ๊ณ์ด์ ์ฐ๋ถํฌ์ธ ๊ฒ์ ํ์ธํ ์ ์์ด์.
apt ๋ช
๋ น์ด๋ฅผ ํตํด ์ค์นํด ์ค๊ฒ์.
๋จผ์ apt ์
๋ฐ์ดํธ๋ฅผ ์งํํด ์ค๊ฒ์.
์์ ๊ฐ์ด ์ค์น๋ฅผ ์งํํด ์ฃผ์์ด์.
์ ์ค์ ํ์ผ์ ๋ณ๊ฒฝํด ์ฃผ๋๋ก ํ ๊ฒ์.
์ฃผ๋๋ ์์ ๊ฐ์ด concurrent = 3์ผ๋ก ๋ณ๊ฒฝํด ์ฃผ์์ด์.
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด ๊น๋ฉ์ CI/CD ๊ธฐ๋ฅ์ ์ด์ฉํ ์ค๋น๊ฐ ๋ชจ๋ ๋๋ ๊ฒ์ด์์.
์ถํ ๊น๋ฉ์ผ๋ก CI/CD ์์
์ ํ๊ฒ ๋๋ฉด ํด๋น ๋ด์ฉ์ ๋ ๊ณต์ ํ๋๋ก ํ ๊ฒ์.
๐ง ์ฐธ๊ณ ์๋ฃ
์ํฌ์ ์ ๋ณด - Setup CI/CD System with GitLab
GitLab์ผ๋ก CI/CD ์์คํ ๊ตฌ์ถ ์ํฌ์์? ์ด๋ฒ ์ํฌ์์์๋ 2๋์ Ubuntu 20.04 LTS(Focal Fossa) ์๋ฒ์ Docker Engine๊ณผ Docker Compose๋ฅผ ์ค์นํ๊ณ , ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๊ฐ์ ์๋ฒ์ Omnibus GitLab๊ณผ GitLab Runner๋ฅผ ์ค์น
workshop.infograb.io
(์๋ฌธ๋์) Automating DevOps with GitLab CI/CD Pipelines: Build efficient CI/CD pipelines to verify sec... Paperback
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."