[Gitlab][CI/CD] GitLab Runner ์„ค์น˜

2023. 8. 2. 14:55ใ†System ์ž‘์—…์‹ค/DevOps

728x90
๋ฐ˜์‘ํ˜•

 



 

 

(์˜๋ฌธ๋„์„œ) 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(๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ) ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•ด์š”.


mkdir -p ...../gitlab-runner/config


์œ„์™€ ๊ฐ™์ด ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ ์†Œ์œ ๊ถŒ์„ $USER๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•ด ์ค„๊ฒŒ์š”.

sudo chown -R $USER : $USER {๋””๋ ‰ํ„ฐ๋ฆฌ ์œ„์น˜}


๊ทธ๋Ÿฐ ๋’ค docker-compose(๋„์ปค ์ปดํฌ์ฆˆ).yml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ค„๊ฒŒ์š”.

docker-compose.yml

728x90


์ฃผ๋‹ˆ๋Š” ์œ„์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์–ด์š”.


์ด์ œ ๊ธฐ๋™ ์‹œ์ผœ ๋ณผ๊ฒŒ์š”.

docker-compose up -d

 


๊ธฐ๋™์ด ์ž˜ ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

 

 

    ๐Ÿ”ฝ ๋“ฑ๋กํ•˜๊ธฐ

        ๐Ÿ“ฆ 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๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋Ÿฌ๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.



์ด๋ ‡๊ฒŒ ํ•œ ๋’ค ๊นƒ๋žฉ ๋Ÿฌ๋„ˆ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์† ํ•ด ์ค๋‹ˆ๋‹ค.


docker exec -it {์ปจํ…Œ์ด๋„ˆ ID} /bin/bash



 

์œ„์™€ ๊ฐ™์ด ๋‚˜์˜ค๋ฉด ๋ช…๋ น์–ด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๊นƒ๋žฉ ๋Ÿฌ๋„ˆ ์ปจํ…Œ์ด๋„ˆ์— ์ž…๋ ฅํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์œ„ ๋ช…๋ น์–ด ์ค‘ 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 ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.



CI/CD -> 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)์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ˆ˜์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

 

/etc/gitlab-runner/config.toml

 

vim config.toml


vim Editor(์—๋””ํ„ฐ)๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์œ„์™€ ๊ฐ™์ด ์„ค์น˜๊ฐ€ ์•ˆ๋˜์–ด ์žˆ์–ด์š”.
๋˜ํ•œ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฐ๋น„์•ˆ ๊ณ„์—ด์˜ ์šฐ๋ถ„ํˆฌ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

apt ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•ด ์ค„๊ฒŒ์š”.

apt-get update && apt-get upgrade


๋จผ์ € apt ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ์ค„๊ฒŒ์š”.


apt-get install -y vim


์œ„์™€ ๊ฐ™์ด ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ด ์ฃผ์—ˆ์–ด์š”.

cat /etc/gitlab-runner/config.toml


์œ„ ์„ค์ • ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด ์ฃผ๋„๋ก ํ• ๊ฒŒ์š”.


vim /etc/gitlab-runner/config.toml


์ฃผ๋‹ˆ๋Š” ์œ„์™€ ๊ฐ™์ด 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

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•