728x90
๋ฐ์ํ
11์ฅ ๋์ปค์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ๋ฐ ํ ์คํธ
11.1 ๋์ปค๋ฅผ ์ด์ฉํ ์ง์์ ํตํฉ ์ ์ฐจ
- CI ์ ์ฐจ๋ ์ฝ๋๋ก๋ถํฐ ์์ํ๋ ํ์ดํ๋ผ์ธ์ด๊ณ , ์ผ๋ จ์ ๋จ๊ณ๋ฅผ ๋ฐ์ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ณ ์ฆ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋๋๋ค.
- ๋์ปค๋ CI ์ ์ฐจ์ ์ผ๊ด์ฑ์ ์ ์งํด ์ค๋ค.
- CI ์ ์ฐจ๊ฐ ์์๋๋ฉด ๋์ปค๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค.
- ํด๋น ์ด๋ฏธ์ง๋ ๋น๋ ๋ฐ ํ ์คํธ, ํจํค์ง, ๋ฐฐํฌ๋ฅผ ์ํ ๋ ์ง์คํธ๋ฆฌ ํธ์๊น์ง ๋ ์ด๋ฏธ์ง๋ค.
- CI ํ์ดํ๋ผ์ธ์ ๊ฐ ๋จ๊ณ๋ ๋์ปค ํน์ ๋์ปค ์ปดํฌ์ฆ์ ์ํด ์คํ๋๋ฉฐ ์ค์ ๊ณผ์ ์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์งํ๋๋ค.
- ์ถ๊ฐ๋ก, ๋์ปค ์ปดํฌ์ฆ๋ก ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ํธ๋ํฝ ๋ฐ์ ์ฉ ์ปจํ ์ด๋๋ฅผ ์ด์ฉํด ์๋ ํฌ ์๋ ํ ์คํธ๋ฅผ ์งํํ ์๋ ์๋ค.
- ์ด๋ ๊ฒ ๋์ปค๋ฅผ ์ด์ฉํ CI ๋ฅผ ๊ตฌ์ถํ ๊ฒฝ์ฐ ์ค์ ๊ด๋ฆฌ๋๋ ํ์ ๊ด๋ฆฌ ์์คํ ๊ณผ, ๋์ปค ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ, CI ์๋ํ ์๋ฒ๊ฐ ํ์ํ๋ค
11.2 ๋์ปค๋ฅผ ์ด์ฉํ ๋น๋ ์ธํธ๋ผ์คํธ๋ญ์ฒ ๊ตฌ์ถ
์ง์ ์ธํ๋ผ์คํธ๋ญ์ณ ๊ตฌ์ถํ๊ธฐ
- ์ง์ ๊ตฌ์ถํด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ณด์ ๊ฐํ, ๋ ๋น ๋ฅธ ์๋, ํน์ ์๋น์ค ์ฅ์ ์กฐ์น ๋ฑ์ ์ด์ ์ด ์๋ค.
- ํ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ Gogs, ์ด๋ฏธ์ง ๋ฐฐํฌ ์คํ ์์ค ๋์ปค ๋ ์ง์คํธ๋ฆฌ, ์๋ํ ์๋ฒ ์ ํจ์ค ์ค์น.
$ cd ./ch11/exercises/infrastructure
$ docker-compose -f docker-compose.yml -f docker-compose-linux.yml up -d
# ๋ ์ง์คํธ๋ฆฌ์ ๋๋ฉ์ธ์ hosts ํ์ผ์ ์ถ๊ฐ
$ echo $'\\n127.0.0.1 registry.local' | sudo tee -a /etc/hosts
$ docker ps
์ฐธ๊ณ diamol/gogs ์ด๋ฏธ์ง์ ๋ฌธ์ ๊ฐ ์๋ค. gogs/gogs:latest ์ด๋ฏธ์ง๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ๋ฉด ์ ์ ๋์๋๋ค.
๋์ปค CI๋ฅผ ๋์ปค ์์ง๊ณผ ์ฐ๊ฒฐํ๊ธฐ
- ์ ์ฒด CI ํ์ดํ๋ผ์ธ์ด ๋์ปค ์ปจํ ์ด๋๋ฅผ ํตํด ์คํ๋๋ฏ๋ก ๋์ปค API ๋ฅผ ํตํด ๋์ปค ์์ง์ ์ฐ๊ฒฐ๋๋ค.
- ๋์ปค CLI ๋ ๋์ปค API ๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ณณ์ ์์นํ CLI ๋ ๊ฐ์ ๋์ปค ์์ง์ ์ ์ํ ์ ์๋ค.
- ์ด๋ ํด๋น ๋์ปค ํต์ ์ ํธ์คํธ ์ปดํจํฐ ์์ผ๋ก ๊ตญํ๋๋ค.
- ํธ์คํธ ์ปดํจํฐ ๋ด๋ถ์ ์ปจํ ์ด๋์ ๋ํ ์กฐ์์ด ๊ฐ๋ฅํ๋ค.
- ๋ฐ๋ผ์, ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ ๋ขฐํ ์ ์๋ ๋์ปค ์ด๋ฏธ์ง์๋ง ์ ์ฉํด์ผ ํ๋ค.
11.3 ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ด์ฉํ ๋น๋ ์ค์
์ด๋ฏธ์ง ํ๊ทธ์ ํ๊ฒฝ๋ณ์ ์ฌ์ฉ
services:
numbers-api:
image: ${REGISTRY:-docker.io}/diamol/ch11-numbers-api:v3-build-${BUILD_NUMBER:-local}
networks:
- app-net
numbers-web:
image: ${REGISTRY:-docker.io}/diamol/ch11-numbers-web:v3-build-${BUILD_NUMBER:-local}
environment:
- RngApi_Url=http://numbers-api/rng
depends_on:
- numbers-api
networks:
- app-net
- :- ๋ ํด๋น ๋ถ๋ถ์ ํ๊ฒฝ๋ณ์๋ก ์นํํ๋ ์ ์๋์ด ์์ง ์๋ค๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก :- ์ดํ์ ์ ์๋ ๊ฐ์ผ๋ก ์นํํ๋ผ๋ ๋ป์ด๋ค.
- ${REGISTRY:-[docker.io](<http://docker.io>) ๋ ํ๊ฒฝ ๋ณ์ REGISTRY ๊ฐ์ ์ฌ์ฉํ๋ ํด๋น ํ๊ฒฝ ๋ณ์๊ฐ ์ ์๋์ด ์์ง ์๋ค๋ฉด docker.io ๋ฅผ ์ฌ์ฉํ๋ผ๋ ์๋ฏธ๋ค.
๋์ปคํ์ผ์์ ๋น๋ ์ธ์์ ์ด๋ฏธ์ง ๋ ์ด๋ธ ์ง์ ํ๊ธฐ
$ cd /ch11/exercises
$ docker compose -f docker-compose.yml -f docker-compose-build.yml build
$ docker image inspect -f '{{.Config.Labels}}' diamol/ch11-numbers-api:v3-build-local
- ์ปจํ ์ด๋, ์ด๋ฏธ์ง, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฑ ๋๋ถ๋ถ์ ๋์ปค ๋ฆฌ์์ค์๋ ๋ ์ด๋ธ์ ๋ถ์ฌํ ์ ์๋ค.
- ๋ ์ด๋ธ์ ๋ฆฌ์์ค์ ๋ํ ์ถ๊ฐ ๋ฐ์ดํฐ์ Key-Value ํํ๋ก ์ ์ฅ๋๋ค.
- CI ํ์ดํ๋ผ์ธ์ ํตํ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋์์ ๋ฐ์ํ๋ ์ด์๋ฅผ ํ์ ํ๋๋ฐ ์ด๋ฏธ์ง ๋ ์ด๋ธ์ ํฐ ๋์์ด ๋๋ค.
FROM diamol/dotnet-aspnet
ARG BUILD_NUMBER=0
ARG BUILD_TAG=local
LABEL version="3.0"
LABEL build_number=${BUILD_NUMBER}
LABEL build_tag=${BUILD_TAG}
ENTRYPOINT ["dotnet", "Numbers.Api.dll"]
- ARG
- ์ด๋ฏธ์ง ๋น๋ ์์ ์๋ง ์ ํจํ Key-Value ์ ์.
- ENV ์ธ์คํธ๋ญ์ ๊ณผ ๊ฑฐ์ ์ ์ฌํ์ง๋ง, ์ด๋ฏธ์ง ๋น๋์์๋ง ์ ํจ.
- LABEL
- Dockerfile ์คํฌ๋ฆฝํธ์ ์ ์๋ Key-Value ๋ฅผ ๋น๋๋๋ ์ด๋ฏธ์ง์ ์ ์ฉ.
x-args: &args
args:
BUILD_NUMBER: ${BUILD_NUMBER:-0}
BUILD_TAG: ${BUILD_TAG:-local}
services:
numbers-api:
build:
context: numbers
dockerfile: numbers-api/Dockerfile.v4
<<: *args
numbers-web:
build:
context: numbers
dockerfile: numbers-web/Dockerfile.v4
<<: *args
- context
- ๋์ปค๊ฐ ๋น๋ ์ค์ ์์ ํ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก
- docker image build [Dockerfile PATH] . ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ฌ ๋๋ ํ ๋ฆฌ์์ ๋น๋ ๋์ง๋ง, context ๋ฅผ ์ด์ฉํ์ฌ ๊ฒฝ๋ก ์ง์ ๊ฐ๋ฅ.
- dockerfile
- Dockerfile ์คํฌ๋ฆฝํธ์ ๊ฒฝ๋ก
- ์๋ ๊ฒฝ๋ก์ผ ๊ฒฝ์ฐ context ์ ์ง์ ๋ ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ค.
- args
- ๋น๋ ์ ์ ๋ฌํ ์ธ์.
- Dockerfile ์์ ARG ์ธ์คํธ๋ญ์ ์ผ๋ก ์ ์๋ ํค์ ์ผ์นํด์ผ ํ๋ค.
- ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๋น๋๋ฅผ ์ํํ๋ ํญ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ํ๋๋ ค๋ฉด, Dockerfile ์ ํ๋๋ก ์ ์งํด์ผ ํ๋ค.
- ์ปดํฌ์ฆ ํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ๋ฉด, ๋ค๋ฅธ ํ๊ฒฝ์์ ์คํ๋๋ผ๋ ๋น๋ ์ฑ๊ณต์ ๋ณด์ฅํ ์ ์๋ค.
11.4 ๋์ปค ์ธ์ ์์กด ๋ชจ๋์ด ๋ถํ์ํ CI ์์ ๋ง๋ค๊ธฐ
- ์ปจํ ์ด๋๋ฅผ ์ด์ฉํ CI๋ฅผ ํ ๊ฒฝ์ฐ ๋ณ๋์ ์์กด๋ชจ๋์ด ํ์ํ์ง ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๋ง์ ์๋น์ค๋ค(Docker Hub, Github Actions, Azure DevOps)์ด ์ด๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ๋ณ๋์ ๋น๋ ์๋ฒ๊ฐ ํ์ ์์ด์ง๊ณ , ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ์งํ ํ์๋ ์๋ค.
- ๋ํ, ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ ์ ์๊ณ , CI ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ํ์ฌ ๋ก์ปฌ ํ๊ฒฝ๊ณผ ๋์ผํ๊ฒ ๋น๋ํ ์ ์๋ค.
$ vi Jenkinsfile
stage('Build') {
steps {
dir('ch11/exercises') {
sh 'chmod +x ./ci/01-build.bat'
sh './ci/01-build.bat'
}
}
}
$ docker composes -f docker-compose.yml -f docker-compose-build.yml build --pull
- pull ์ต์ ์ ๋น๋์ ํ์ํ ์ด๋ฏธ์ง๋ฅผ ๋ฌด์กฐ๊ฑด ์ต์ ๋ฒ์ ์ผ๋ก ์๋ก ๋ด๋ ค๋ฐ๋ ๊ฒ์ด๋ค.
- CI ํ์ดํ๋ผ์ธ์์๋ Dockerfile ์ ์ง์ ๋ ์ด๋ฏธ์ง์ ๋ณ๊ฒฝ์ด ์๊ฒฝ์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ์น๋ ์ํฅ์ ์ต๋ํ ๋นจ๋ฆฌ ์ ์ ์์ผ๋ฏ๋ก ํด๋น ์ต์ ์ด ์ค์ํ๋ค.
Jenkins ๋น๋ ๋จ๊ณ
A. ๊ฒ์ฆ๋จ๊ณ
- 00-verify.bat ์คํฌ๋ฆฝํธ ์คํ.
- ํด๋น ์คํฌ๋ฆฝํธ๋ ๋์ปค ๋ฐ ๋์ปค ์ปดํฌ์ฆ์ ๋ฒ์ ์ ์ถ๋ ฅ.
B. ๋น๋ ๋จ๊ณ
- 01-build.bat ์คํฌ๋ฆฝํธ ์คํ.
- ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์คํํด ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ์ญํ
C. ํ ์คํธ ๋จ๊ณ
- 02-test.bat ์คํฌ๋ฆฝํธ ์คํ
- ๋์ปค ์ปดํฌ์ฆ๋ก ๋น๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ. ์ปจํ ์ด๋ ๋ชฉ๋ก ์ถ๋ ฅ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ.
D. ํธ์ ๋จ๊ณ
- 03-push.bat ์คํฌ๋ฆฝํธ ์คํ.
- ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์คํํด ๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ๋ ์ง์คํธ๋ฆฌ์ ํธ์.
11.5 CI ํ์ดํ๋ผ์ธ์ ๊ด๊ณ๋ ์ปจํ ์ด๋
- ๋์ปค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ํ๋ก์ธ์ค์ ์ต์์ ๋ ์ด์ด๊ฐ ํญ์ ๋์ผํด์ง๋ค.
- ์ด ์ ์ ์ด์ฉํด CI ํ์ดํ๋ผ์ธ์ ์ทจ์ฝ์ ๋ฐ ๋ณด์ ๊ฒ์ฌ, ๋์งํธ ์๋ช ๋ฑ์ ์ถ๊ฐํ ์ ์๋ค.
- ๋์ปค์์๋ ํด๋น ๋จ๊ณ๋ฅผ ์์ ์ํํธ์จ์ด ๊ณต๊ธ ์ฒด์ธ์ด๋ผ๊ณ ํ๊ณ , ๋ฐฐํฌํ ์ํํธ์จ์ด์ ์์ ์ฑ์ ๋ด๋ณดํ๋ค๋ ์ ์์ ๋งค์ฐ ์ค์ํ๋ค.
- ์ด์ ํ๊ฒฝ์์ CI ํ์ดํ๋ผ์ธ์ ๋ฌด์ฌํ ํต๊ณผํ์ ๋๋ง ์ถ๊ฐ๋๋ ๋์งํธ ์๋ช ์ด ์๋ ์ด๋ฏธ์ง๋ก๋ง ์ปจํ ์ด๋๋ฅผ ์คํ๋๊ฒ ์ค์ ํ ์๋ ์๋ค.
728x90
๋ฐ์ํ