๐ค GitLab CI/CD ๆไฝณๅฏฆ่ธ:ๅฎๅ จๆๆ、่ฎๆธ็ฎก็、Deploy Token ่ๆจก็ตๅ Pipelines
GitLab CI/CD ๅนพไนๆฏ็พไปฃ DevOps ๅ้็ๆจ้ :ๅพ Commit ้ๅง่ชๅ้ฒ่กๅปบ็ฝฎ、ๆธฌ่ฉฆ、้จ็ฝฒ่ๅฎๅ จๆๆ,่ฎ็ๆฌๅ่ณช่็ผไฝ็ฏๅฅ้ฝๆด็ฉฉๅฎ。 ๆฌ็ฏๆด็ๅฏฆๅไธๆๅธธ็จ、ไนๆๅฎนๆ่ธฉ้ท็้จๅ:็ฐๅข่ฎๆธ่ๅฏ้ฐ็ฎก็、Deploy Token ไฝฟ็จๆนๅผ、 ๅ งๅปบๅฎๅ จๆๆๅ็จ、ไปฅๅๅฆไฝๆ Pipeline ๆๆๆจก็ตๅ็ตๆง,่ฎๅฐๆก่ถ้ท่ถๅคงไนไธๆ่ฎๆ YAML ๅฐ็。
๐ ไธ、GitLab CI/CD ๆ ธๅฟๆถๆงๆฆๅฟต
ๅ ๅฟซ้็จๅนพๅ้้ตๅญ้ๆธ GitLab CI/CD ็ๆ ธๅฟ็ตไปถ:
- Runner:็ๆญฃๅท่ก Job ็ๅฏฆ้ซ/VM/Container,ๅฏไปฅๆฏ Shared Runner ๆๅฐๆก่ชๅปบ。
- Pipeline:็ฑๅคๅ Stage ่ Job ็ตๆ็ไธๆฌกๅฎๆดๆต็จ,ไพๅฆ build → test → deploy。
- .gitlab-ci.yml:ๆพๅจ Repo ๆ น็ฎ้็ YAML ่จญๅฎๆช,ๆ่ฟฐ Pipeline ่ฆๅ。
- Environment:้จ็ฝฒ็ฎ็ๅฐ,ไพๅฆ dev、test、stage、prod ็ญ。
ไธๅๆ็ฐกๅฎ็ Pipeline ๅฏ่ฝ้ท้ๆจฃ:
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "Building..."
test_job:
stage: test
script:
- echo "Running tests..."
deploy_job:
stage: deploy
script:
- echo "Deploying to production..."
ๅช่ฆๆ้ๅๆชๆกๅฝๅ็บ .gitlab-ci.yml ไธฆๆจไธ GitLab,ไธไธๆฌก push ๅฐฑๆ่ชๅ่งธ็ผ Pipeline。
๐ ไบ、GitLab ๅ งๅปบๅฎๅ จๆๆ:SAST / DAST / Secret Detection
ๅจไผๆฅญ่ๆฟๅบๅฐๆกไธญ,CI/CD ไธๅชๆฏ「่ชๅ build & deploy」,ๅๆไนๆฎๆผ「ๅฎๅ จๅฎ้ๅก」: ๆฏๆฌก Commit ้ฝ้ ไพฟ่ทไธ่ผชๅฎๅ จๆชขๆฅ,ๅฏไปฅๅจๆญฃๅผไธ็ทๅๅฐฑๆๅบๆฝๅจๅ้ก。
| ๆๆ้กๅ | ไธป่ฆ็จ้ |
|---|---|
| SAST(Static Application Security Testing) | ็ดๆฅๅๆๅๅง็ขผ,ๆพๅบ SQL Injection、XSS ็ญๅธธ่ฆๆผๆดๆจกๅผ。 |
| DAST(Dynamic Application Security Testing) | ๅจๆ็จ็จๅผๅฏฆ้่ท่ตทไพๆ,ไปฅ้ป็ฎฑๆนๅผๆจกๆฌๆปๆ。 |
| Secret Detection | ๆชขๆฅๆฏๅฆไธๅฐๅฟๆ API Key、Token、ๅฏ็ขผ commit ๅฐ Repo。 |
ๅจ GitLab ไธญๅ็จๅ
ถๅฏฆ้ๅธธ็ฐกๅฎ,ๅช่ฆๅจ .gitlab-ci.yml ไธญๅ ๅ
ฅๅฎๆน Template:
include:
- template: Security/SAST.gitlab-ci.yml
- template: Security/DAST.gitlab-ci.yml
- template: Security/Secret-Detection.gitlab-ci.yml
ๅ ๅ ฅๅพ็ๆๆ:
- ๆฏๆฌก Pipeline ๆ่ชๅ่ทๅฐๆๆๆ。
- ็ตๆๆ้กฏ็คบๅจ Merge Request ็「Security」ๆ「Pipelines」้ ็ฑค。
- ๅฏไปฅ็ขๅบๅ ฑ่กจ,ๆนไพฟ่ณๅฎ่็จฝๆ ธๆชข่ฆ。
๐ ไธ、CI/CD ่ฎๆธ็ฎก็:ๅฏ้ฐ、ๅฎๅ จ่ๅๅฑค้ ็ฝฎ
ไปปไฝไธๆขๅๆจฃ็ Pipeline ไธๅฎๆๆฅ่งธๅฐๅๅผๅๆจฃ็ๆฉๅฏ่ณ่จ:
- Docker Registry ็ๅธณ่ๅฏ็ขผๆ Token
- ๅ็ฐๅข็ API Key、DB ๅฏ็ขผ
- ็ฌฌไธๆนๆๅ(Cloud、็ฃๆง็ณป็ตฑ、Webhook)็ๆ่ญ
้ไบ็ตๅฐไธ่ฝ็กฌๅฏซๅจ .gitlab-ci.yml ่ฃก้ข,่ๆฏ่ฆๆพๅจ GitLab ็ CI/CD Variables ไธญ。
1️⃣ Variables ๅฑค็ด่ๅฑฌๆง
| ๅฑค็ด/ๅฑฌๆง | ่ชชๆ |
|---|---|
| Group-level Variable | ๆดๅ็พค็ตๅบไธๆๆ Repo ้ฝๅ ฑ็จ,ไพๅฆๅ ฌๅธ็ตฑไธ็ Registry URL。 |
| Project-level Variable | ๅชๅจๅฎไธๅฐๆกๅ งไฝฟ็จ,ไพๅฆ่ฉฒ็ณป็ตฑๅฐ็จ็ API Key。 |
| Protected | ๅ ่ฝๅจ Protected Branch / Tag(ๅฆ main、release)ไฝฟ็จ,้ฟๅ ๅจๆธฌ่ฉฆๅๆฏ่ขซๆฟซ็จ。 |
| Masked | ๅณไฝฟๅจ Job Log ไธญ echo ๅบไพไนไธๆ้กฏ็คบ็ๆญฃ็ๅผ,ๅฏ้ไฝๆดฉๆผ้ขจ้ช。 |
่จญๅฎไฝ็ฝฎ:Project → Settings → CI/CD → Variables。
ไพๅฆๅฎ็พฉไธๅไพ Pipeline ไฝฟ็จ็ Token:
MY_PRIVATE_TOKEN = xxxxxxx(ๅๆๅพ้ธ Protected + Masked)
ๅจ .gitlab-ci.yml ไฝฟ็จๆนๅผๅฆไธ:
deploy_job:
stage: deploy
script:
- echo "Deploy with token (ไธๆ้กฏ็คบ็ๆญฃๅ
งๅฎน)"
- curl -H "Authorization: Bearer $MY_PRIVATE_TOKEN" https://api.example.com/deploy
๐ ๅ、Deploy Token ่ Deploy Key:ๅทฎ็ฐ่ๅฏฆๅๅปบ่ญฐ
ๅพๅคๅ้ๆ็ๆ:「ๆ่ฆ่ฎๅค้จ็ณป็ตฑๆ Repo ๆๆ Container,่ฆ็จ Deploy Key?้ๆฏ Deploy Token?」, ๅ ฉ่ ้ฝๅฏไปฅ「็ตฆ็ณป็ตฑๅญๅ Repo」,ไฝ่จญ่จ็ฎๆจ่ๅฎๅ จๆจกๅๅฎๅ จไธๅ。
| ้ ็ฎ | Deploy Token | Deploy Key |
|---|---|---|
| ๅๆ | ๅธณ่+ๅฏ็ขผๅฝขๅผ,ๅฏๅญๅ Repo / Registry | SSH ๅ ฌ้ฐ/็ง้ฐ้ ๅฐ,้ๅธธ็จๆผ Read-only Clone |
| ๅธธ่ฆ็จ้ | Kubernetes、ๅค้จๆๅๆ Docker Image | CI Job ๆๅค้จไธปๆฉ clone Repo |
| ๅฎๅ จๆงๅถ | ๅฏ่จญๅฎ้ๆๆฅ่ๆฌ้็ฏๅ | ๅธธ่ขซๅคๅฐๆกๅ ฑ็จ,็ฎก็ไธ็ถ่ผๅฎนๆ็ไธๅพ้ |
| ๅปบ่ญฐ | ๆญฃๅผ็ฐๅข้จ็ฝฒๅผท็ๅปบ่ญฐไฝฟ็จ | ้ฉๅๅฎ็ด Read-only ไฝฟ็จๆ ๅข |
ๆญฃๅผ็ฐๅข(prod)ๆไฝณๅฏฆๅ:
- ไฝฟ็จ Deploy Token ๆญ้ ้ๅฎๆฌ้(ๅ Pull Image / Read Repo)。
- ่จญๅฎๆ็ขบ้ๆๆฅ,ไพๅฆ 30~90 ๅคฉ,ๅฎๆๆฑฐๆ。
- Deploy Token ๅช็ตฆ CI / K8s / ้จ็ฝฒ็ณป็ตฑไฝฟ็จ,ไธ็ตฆไบบ้ก้็ผ่ ๆฅๅธธไฝฟ็จ。
๐ ไบ、Pipeline ๆจก็ตๅ่จญ่จ:้ฟๅ YAML ๅฐ็
ๅฐๆกไธ้ๅงๅชๆๅ
ฉไธๅ Job,้ๅฏไปฅ้ ไธๅ .gitlab-ci.yml ๆไฝ;
ไฝ็ถไฝ ้ๅงๆๆๅคๅๅพฎๆๅ、ๆฏๆดๅคๅ้จ็ฝฒ็ฐๅข、ๅๅ ไธไธๅ ๆๆ่ๆธฌ่ฉฆ,
YAML ๆชๅฏ่ฝๅพๅฟซๅฐฑ็ ดๅ่ก,็ถญ่ญทๆๆฌ็็ธ。
ๅปบ่ญฐๅๆณๆฏๆ Pipeline ๆๆ「ๆจก็ตๅๆชๆก」,็ฎ้็ตๆงๅฏไปฅๅ้ๆจฃ:
.gitlab-ci.yml
ci-build.yml
ci-test.yml
ci-deploy.yml
ci-security.yml
ไธปๆช .gitlab-ci.yml ่ฒ ่ฒฌๆๆๆๆจก็ต include ้ฒไพ:
include:
- local: "ci-build.yml"
- local: "ci-test.yml"
- local: "ci-deploy.yml"
- local: "ci-security.yml"
ไพๅฆ ci-build.yml ๅฏไปฅๅฐๅฟๆ่ฟฐ build ็ธ้ Job:
stages:
- build
build_app:
stage: build
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
ๅฅฝ่:
- ไธๅๅฐ็ตๅฏไปฅๅ่ช็ถญ่ญท่ชๅทฑ็ CI ๆจก็ตๆช。
- ๅไธๅ build/test/deploy ๆจก็ตๅฏไปฅ่ขซๅคๅๅฐๆกๅ ฑ็จ。
- ไธปๆช
.gitlab-ci.yml่ฎๆ「็ธฝ็ฎ้」,ๅฏ่ฎๆงๆด้ซ。
๐ ๅ ญ、ๅค็ฐๅข้จ็ฝฒ็ฏไพ:dev / test / stage / prod
ๅจๅฏฆๅไธญ,ๆๅธธ่ฆ็็ฐๅขๅๅฑคๅคง่ดๅฆไธ:
| ็ฐๅข | ็จ้ |
|---|---|
| dev | ้็ผไบบๅกๆฅๅธธๆธฌ่ฉฆ,ๅ ่จฑ่ผ้ซ้ ป็้จ็ฝฒ。 |
| test / qa | ๆธฌ่ฉฆๅ้้ฒ่กๅ่ฝ่ๅๆญธๆธฌ่ฉฆ。 |
| stage / pre-prod | ๅนพไน็ญๅๆญฃๅผ็ฐๅข,็จไพๅๆๅพ้ฉ่ญ。 |
| prod | ๆญฃๅผๅฐๅคๆๅ,ๆๆๆไฝๅฟ ้ ๅฏ่ฟฝ่นค、ๅฏ็จฝๆ ธ。 |
ไปฅไธๆฏไธๅ็ฐกๅ็็ๅค็ฐๅข้จ็ฝฒ YAML ็ฏไพ:
stages:
- build
- test
- deploy
build_app:
stage: build
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
test_app:
stage: test
script:
- npm test
deploy_dev:
stage: deploy
environment:
name: dev
url: https://dev.example.com
script:
- ./deploy.sh dev
only:
- branches
except:
- main
deploy_prod:
stage: deploy
environment:
name: production
url: https://www.example.com
script:
- ./deploy.sh prod
when: manual
only:
- main
้่ฃกๆๅนพๅ้้ป:
- dev ็ฐๅข:ๅฐๆๆๅๆฏ้ๆพ,่ชๅ้จ็ฝฒ,ๆนไพฟ้็ผไบบๅกๅฟซ้้ฉ่ญ。
- prod ็ฐๅข:ๅชๆ
mainๅๆฏๅฏไปฅ้จ็ฝฒ,ไธๅฟ ้ ็ฑไบบๆๅๆไธ「Play」。 - Environment ๅๅก:ๅฏๆญ้ GitLab ็ Environment Dashboard ้กฏ็คบๆฏๅ็ฐๅข็ฎๅ่ท็ๆฏๅชไธๅ Commit。
๐ ไธ、ๆ่ฝๆไฝณๅ:Cache、Artifacts ่ Runner ็ญ็ฅ
็ถๅฐๆก่ฎๅคง、Pipeline ๆฌกๆธ่ฎๅค,CI/CD ้ๅบฆๅฐฑๆๆ็บ้็ผๆ็็้้ต。ไปฅไธๆฏๅนพๅๅธธ่ฆ็ๆไฝณๅๆๅทง:
1️⃣ ๅ็จ Cache ๆธๅฐ้่คไธ่ผไพ่ณด
cache:
key: "node-modules"
paths:
- node_modules/
ๆญ้
npm ci ๆ yarn install,ๅฏไปฅๅคงๅน
ๆธๅฐๆฏๆฌก Pipeline ็ไพ่ณดไธ่ผๆ้。
2️⃣ ไฝฟ็จ Artifacts ๅณ้ๅปบ็ฝฎ็ตๆ
ไธ่ฆๅจๆฏๅ Stage ้ๆฐ build,่ๆฏๆ build ๅบไพ็็ตๆๅณ้็ตฆๅพ็บ Job ไฝฟ็จ:
build_app:
stage: build
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
deploy_prod:
stage: deploy
dependencies:
- build_app
script:
- ./deploy_dist.sh
3️⃣ Runner ่ฆๅๅปบ่ญฐ
- ้ๅฐไธๅไปปๅ้กๅไฝฟ็จไธๅ Tag(ไพๅฆ
docker、shell)。 - ๆๅฝฑ้ฟๆญฃๅผ็ฐๅข็้จ็ฝฒ Job,่ซไฝฟ็จๅฐๅฑฌ Runner,ไธ่ไธ่ฌ build/test ๅ ฑ็จ。
- ๆๅคง้ parallel job ๆ,ๅฏ็จ autoscaling Runner(ไพๅฆๆญ้ K8s ๆ Cloud)ๅๆ ๆด็ธฎ。
๐ ๅ ซ、ๅฏฆๅๅฎๅ จๅปบ่ญฐ็ธฝๆด็
ๆๅพๆด็ไธไปฝ「CI/CD ๅฎๅ จ Checklist」,ๆนไพฟๅจๅฐๅ ฅๆ็จฝๆ ธๆๅฟซ้ๆชขๆฅ:
- ๆๆ Token、ๅฏ็ขผ้ฝๆพๅจ CI/CD Variables,ไธๅฏซๆญปๅจ YAML ๆ็จๅผ็ขผ。
- ้่ฆ่ฎๆธไธๅพ่จญ็บ Protected + Masked。
- Production ้จ็ฝฒ Job ไธๅพ่จญๅฎ
when: manual,ไธฆๅชๅ ่จฑ main / release ๅๆฏ่งธ็ผ。 - Deploy Token ่จญๅฎ้ๆๆฅ่ๅฟ ่ฆๆๅฐๆฌ้(Principle of Least Privilege)。
- ๅ็จ SAST / DAST / Secret Detection ็ญๅฎๅ จๆๆ。
- ้ๅถ Runner Tag,้ฟๅ ไธๅฏไฟก็ Job ๅจๆๆ Runner ไธๅท่ก。
- ่จญๅฎ Branch Protection ่ฆๅ:่ฆๆฑ Merge Request、่ณๅฐไธไฝ reviewer ้้ๆ่ฝๅไฝต。
๐ ๅปถไผธ้ฑ่ฎ
- ๐ค GitLab Runner ่ Pipeline ๅบ็คๆๅญธ:ๅพ้ถๅปบ็ซ็ฌฌไธๆข CI/CD
- ๐ณ GitLab Docker Runner + Registry ๅฏฆๆฐ:Build、Push、Deploy ไธๆข้พ
- ๐ ้ซ้ GitLab CI/CD:Artifacts ๆต็จ、Blue-Green ่ Canary ้จ็ฝฒ็ญ็ฅ
— WWFandy・DevOps ่ชๅๅๅทฅ็จ็ญ่จ
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ