HashiCorp๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค
์ฌ์ค HashiCorp๋ Waypoint๋ฅผ ์คํ ์์ค๋ก ์ถ์ํ์ผ๋ฉฐ ๋ง์ ์์ ์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ์ ์์ค์ ์ฌ์ฉ์์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค. Waypoint๋ ๋ ธํธ๋ถ์์ ์ง์ ์คํํ๊ฑฐ๋ ์ ํํ CI/CD ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์์ ์คํํ ์ ์๋ ์คํ ํ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. Waypoint๋ Kubernetes, Docker, Google Cloud Run, AWS ECS ๋ฑ์ ์ง์ํ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋์๋ ์ฌ์ฉ์์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค.
๋ฉ์ง ๊ธ์ ์ฝ์ ํ
๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ ํ ํ ํ์ด์ง๋ฅผ ํ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ค์ํผ ์ด ํ๋ก์ ํธ์๋ Dockerfile์ด ์์ต๋๋ค. Waypoint๊ฐ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ฒ๋ฆฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ ์ถ๊ฐ๋์ง ์์์ต๋๋ค. ํ์ผ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. waypoint.hcl
์ํํ ์์
์ ์ดํดํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
project = "example-nodejs"
app "example-nodejs" {
labels = {
"service" = "example-nodejs",
"env" = "dev"
}
build {
use "pack" {}
registry {
use "aws-ecr" {
region = "us-east-1"
repository = "waypoint-gitlab"
tag = "latest"
}
}
}
deploy {
use "aws-ecs" {
region = "us-east-1"
memory = "512"
}
}
}
๋น๋ ๋จ๊ณ์์ Waypoint๋ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๋น๋ํฉ(
์ด๋ฏธ์ง๊ฐ ๊ตฌ์ถ๋๋ฉด Waypoint๋ ์๋์ผ๋ก AWS ECR ๋ ์ง์คํธ๋ฆฌ์ ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ํ์ฌ ๋ฐฐ์ก ์ค๋น๋ฅผ ํฉ๋๋ค. ์กฐ๋ฆฝ์ด ๋๋๋ฉด ๋ฐฐ์ก ๋จ๊ณ์์ ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
๋ด ๋ ธํธ๋ถ์์๋ ์ฝ์ต๋๋ค. ๋ด AWS ๊ณ์ ์์ ์ด๋ฏธ ์ธ์ฆ๋ Waypoint๋ฅผ ์ ๋ ฅํ๋๋ฐ "์๋ํฉ๋๋ค". ํ์ง๋ง ๋ ธํธ๋ถ์ ๋์ด์๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์๋๋ฉด ํ์ฌ ํตํฉ ํ ์คํธ, ๋ณด์ ํ ์คํธ ๋ฑ์ด ์คํ๋๋ ์ ์ฒด CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์ด ๋ฐฐํฌ๋ฅผ ์๋ํํ๊ณ ์ถ์ต๋๊น? GitLab CI/CD๊ฐ ๋ฑ์ฅํ๋ ๋ถ๋ถ์ ๋๋ค!
NB CI/CD๋ฅผ ๊ตฌํํ ๊ณํ์ด๊ฑฐ๋ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํ๊ธฐ ์์ํ๋ ค๋ ๊ฒฝ์ฐ ์๋ก์ด Slurm ๊ณผ์ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค.
"Gitlab CI์ ์์ ๋ํ CI/CD" . ํ์ฌ ์ ์ฃผ๋ฌธ ๊ฐ๊ฒฉ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
GitLab CI/CD์ ์จ์ดํฌ์ธํธ
GitLab CI/CD์์ ์ด ๋ชจ๋ ๊ฒ์ ์กฐ์จํ๊ธฐ ์ํด ํ์ผ์ ๋ฌด์์ด ํ์ํ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. .gitlab-ci.yml
:
- ์ฐ์ ๋ด๋ถ์์ ์คํํ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๊ฐ ํ์ํฉ๋๋ค. Waypoint๋ ๋ชจ๋ Linux ๋ฐฐํฌํ์์ ์คํ๋๋ฉฐ Docker๋ง ํ์ํ๋ฏ๋ก ์ผ๋ฐ Docker ์ด๋ฏธ์ง๋ก ์คํํ ์ ์์ต๋๋ค.
- ๋ค์์ผ๋ก ์ด ์ด๋ฏธ์ง์ Waypoint๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ๋ฏธ๋์ ์ฐ๋ฆฌ๋ ์์งํ ์ ์์ต๋๋ค
๋ฉํ ๋น๋ ์ด๋ฏธ์ง ์ด ํ๋ก์ธ์ค๋ฅผ ์ง์ ์ปจํ ์ด๋ํํฉ๋๋ค. - ๋ง์ง๋ง์ผ๋ก Waypoint ๋ช ๋ น์ ์คํํฉ๋๋ค.
์์๋ ํ์ดํ๋ผ์ธ์ด ๋ฐฐํฌ๋ฅผ ์ํํ๋ ๋ฐ ํ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ด ์์ง๋ง AWS์ ๋ฐฐํฌํ๋ ค๋ฉด AWS ๊ณ์ ์ ๋ก๊ทธ์ธํด์ผ ํ๋ค๋ ํ ๊ฐ์ง๊ฐ ๋ ํ์ํฉ๋๋ค. ์จ์ดํฌ์ธํธ ์ค๋ช
์์
AWS์์ GitLab CICD ์ธ์ฆ์ ์ํ ๋ช ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ต์
์ ๋ด์ฅํ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. AWS_ACCESS_KEY_ID
ะธ AWS_SECRET_ACCESS_KEY
.
๊ทธ๊ฒ์ ํ๋๋ก ๋ชจ์ผ๊ธฐ
์ธ์ฆ์ ํ์
ํ๋ฉด ์์ํ ์ ์์ต๋๋ค! ์ฐ๋ฆฌ์ ๊ฒฐ์น์ .gitlab-ci.yml
๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค :
waypoint:
image: docker:latest
stage: build
services:
- docker:dind
# Define environment variables, e.g. `WAYPOINT_VERSION: '0.1.1'`
variables:
WAYPOINT_VERSION: ''
WAYPOINT_SERVER_ADDR: ''
WAYPOINT_SERVER_TOKEN: ''
WAYPOINT_SERVER_TLS: '1'
WAYPOINT_SERVER_TLS_SKIP_VERIFY: '1'
script:
- wget -q -O /tmp/waypoint.zip https://releases.hashicorp.com/waypoint/${WAYPOINT_VERSION}/waypoint_${WAYPOINT_VERSION}_linux_amd64.zip
- unzip -d /usr/local/bin /tmp/waypoint.zip
- rm -rf /tmp/waypoint*
- waypoint init
- waypoint build
- waypoint deploy
- waypoint release
์ด๋ฏธ์ง๋ก ์์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. docker:latest
Waypoint์ ํ์ํ ๋ช ๊ฐ์ง ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. ์ฅ์์ script
์ต์ Waypoint ์คํ ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ /usr/local/bin
. ๋ฌ๋๋ ์ด๋ฏธ AWS์์ ์ธ์ฆ๋์์ผ๋ฏ๋ก ๊ฐ๋จํ ์คํํฉ๋๋ค. waypoint init
, build
, deploy
ะธ release
.
๋น๋ ์์ ์ ์ถ๋ ฅ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋กค๋งํ ์๋ํฌ์ธํธ๊ฐ ํ์๋ฉ๋๋ค.
์จ์ดํฌ์ธํธ ์ค ํ๋
HashiCorp์ GitLab์ด ๊ฐ๋ฐํ ๊ณต๋ ์๋ฃจ์
์ ๊ธฐ์
์ด ์ผ๊ด๋ ๊ณต๊ธ๋ง ๋ฐ ์ธํ๋ผ ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ก ๋์์ค๋๋ค. Waypoint๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ ๊ฑธ์ ๋ ๋์๊ฐ ํ๋ก์ ํธ์ ์ถ๊ฐ ๋ฐ์ ์ ๊ธฐ๋ํฉ๋๋ค. Waypoint์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
CI / CD์ ์์น์ ์ดํดํ๊ณ Gitlab CI ์์
์ ๋ชจ๋ ๋ฏธ๋ฌํจ์ ๋ง์คํฐํ๊ณ ๋น๋์ค ๊ณผ์ ์ ์๋ฃํ์ฌ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com