๐ GitLab CI/CD ้ซ้่ชๅๅ:Pipeline Templates、Dynamic Environments ่ GitOps ไฝ็ฝฒๆต็จ
GitLab CI/CD ๆฏ็ฎๅๆๅฎๆด、ๅฏๆดๅ
ๆงๆ้ซ็ DevOps ๅนณๅฐไนไธ。
ๅคงๅคๆธไบบๅชๆๆฐๅฏซๅบๆฌ็ .gitlab-ci.yml,ไฝๅจไผๆฅญๆๅคงๅๅฐๆกไธญ,ๅฟ
้ ๅ็จ:
- Pipeline Templates(ๅฏ้่คไฝฟ็จ)
- Dynamic Environments(ๅๆ ้จ็ฝฒ)
- GitOps + Auto Deploy(่ชๅไฝ็ฝฒ)
- Multi-stage pipelines(ๅค้ๆฎต)
- Environment-specific configs(ไพ็ฐๅขๅๆ่จญๅฎ)
ๆฌๆๅฐ็จๅฎๆด็คบไพ่ๆถๆงๅ,ๅธถไฝ ๅพๅบ็คๅฐๅฏฆๆฐ,ๆ้ ไผๆฅญ็ด GitLab ่ชๅๅๆจกๅผ。
๐ ไธ、Pipeline Templates:ๆ้ ๅฏ้่คไฝฟ็จ็ CI ๆจฃๆฟ
็ถไฝ ๆๅคๅๅฐๆก,้่ฆ็ธๅ็ CI ๆต็จ(ไพๅฆ build、test、scan、deploy), ๆๅฅฝ็ๆนๅผๅฐฑๆฏๅฐ Pipeline ่จญ่จๆ「ๆจก็ตๅ」ไธฆ่ขซๅฐๆกๅผๅ ฅ。
✔ ๅปบ็ซ CI ๆจฃๆฟ(ci-templates/build.yml)
# templates/build.yml
.build_template:
image: docker:latest
services:
- docker:dind
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
✔ ๅฐๆกไธป CI ๅผๅ ฅ Template
include:
- project: 'devops/ci-templates'
file: '/build.yml'
build:
extends: .build_template
้ๆจฃๆๆๅฐๆกๅฐฑ่ฝๅ ฑไบซ็ธๅๆต็จ,้ๆ「ๅบ็ค CI ๅนณๅฐๅ」。
๐ ไบ、Dynamic Environments:็ๆญฃ็ PR Preview / Feature Testing
Dynamic Environment ๅฏไปฅ็บๆฏๅ branch ๆๆฏๅ Merge Request ๅปบ็ซ่ชๅทฑ็็จ็ซ็ฐๅข:
- ่ชๅ้จ็ฝฒ
- ่ชๅๅปบ็ซๅญ็ถฒๅ
- PR ๅไฝตๅพ่ชๅๅช้ค
็ฏไพ:ๆฏๅ branch ่ชๅๅปบ็ซๅฐๆ็ฐๅข
stages:
- build
- deploy
deploy_preview:
stage: deploy
script:
- helm upgrade --install app-$CI_COMMIT_REF_SLUG ./chart \
--set env=$CI_COMMIT_REF_SLUG
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_COMMIT_REF_SLUG.example.com
only:
- branches
ไธไพๆ่ฎๆฏๅ branch ่ชๅๅปบ็ซ: review/branch-name ็้จ็ฝฒ็ฐๅข。
๐ ไธ、ไฝฟ็จ includes ๅๅๅค้ๆฎต Pipeline(ๅคงๅๅฐๆกๆไฝณ่งฃ)
ๅฏๅฐ CI ๅๆๅคๅ้จๅ:
.gitlab-ci.yml ci/ ├── build.yml ├── test.yml ├── security.yml └── deploy.yml
ไธป CI(็ฐกๆฝๆธ ๆฅ)
include: - local: 'ci/build.yml' - local: 'ci/test.yml' - local: 'ci/security.yml' - local: 'ci/deploy.yml'
ๅ ๆญคๅคงๅๅ้ๅฏไปฅๆธ ๆฅๅๅทฅ,ไนๆๅ CI ็ๆฌๆงๅถ็ๅฏ่ฎๆง。
๐ ๅ、GitOps ่ชๅๅไฝ็ฝฒ(ArgoCD / FluxCD)
ๅณ็ตฑ CI/CD ๆฏ: CI build → CD deploy ็ดๆฅๆจ้ๅฐ Kubernetes
GitOps ็ๅทฅไฝๆต็จๆฏ: CI build → CI ๆดๆฐ manifest → Git Repo → ArgoCD/Flux ่ชๅๅๆญฅ้จ็ฝฒ
ๆถๆงๅ(ASCII)
+--------------+ +---------------------+
| GitLab | push | GitOps Repo (K8s) |
| (CI Build) +-------->+ deployment.yaml |
+--------------+ +---------+-----------+
|
v (auto-sync)
+-----------+
| ArgoCD |
+-----+-----+
|
v
+-----------+
| Kubernetes|
+-----------+
้็จฎๆถๆง็ๅฅฝ่:
- ้ถไฟกไปป:CI ไธ้่ฆ็ดๆฅๆไฝ Kubernetes
- ็ฐๅข็ๆ ๅฎๅ จไปฅ Git ็บๆบ(ๅณ Infrastructure as Code)
- ๅฏ่ฟฝ่นคๆๆ้จ็ฝฒ็ๆญทๅฒ่จ้
๐ ไบ、็ฏไพ:CI ่ชๅๆดๆฐ deployment.yaml(GitOps Workflow)
CI ๆดๆฐ็ๆฌ่
update_manifest:
stage: deploy
image: alpine
script:
- sed -i "s/tag:.*/tag: $CI_COMMIT_SHORT_SHA/" k8s/deployment.yaml
- git config --global user.email "ci@example.com"
- git config --global user.name "gitlab-ci"
- git add k8s/deployment.yaml
- git commit -m "Update image tag to $CI_COMMIT_SHORT_SHA"
- git push origin HEAD:main
only:
- main
ArgoCD / Flux ๅฐฑๆ่ชๅๆๆฐ็ deployment ้จ็ฝฒๅฐๅข้。
๐ ๅ ญ、Multi-Stage Pipeline(Build → Test → Scan → Deploy)
stages:
- build
- test
- security
- deploy
build:
stage: build
script:
- docker build -t app:$CI_COMMIT_SHA .
unit_test:
stage: test
script:
- pytest
security_scan:
stage: security
script:
- trivy fs .
deploy_prod:
stage: deploy
script:
- helm upgrade --install app ./chart
only:
- tags
้ๆฏไผๆฅญๆๅธธ่ฆ็ CI/CD ้ๆฎตๅไฝ่จญ่จ。
๐ ไธ、Environment-Specific Config(ไธๅ็ฐๅข่ชๅๅๆ่จญๅฎ)
ๅธธ่ฆ้ๆฑ:
- dev ไฝฟ็จ dev DB
- stage ไฝฟ็จ stage DB
- prod ไฝฟ็จๅฐ็จ่จญๅฎ
CI ไธญๅๆ ๆณจๅ ฅ Config
script: - if [ "$CI_ENVIRONMENT_NAME" == "production" ]; then export APP_ENV=prod; fi - if [ "$CI_ENVIRONMENT_NAME" == "staging" ]; then export APP_ENV=stage; fi - echo "Using environment: $APP_ENV"
๐ ๅ ซ、ๆไฝณๅฏฆๅ็ธฝ็ต(ๅปบ่ญฐไฝ ไฝฟ็จ้ไบ)
- ✔ ไฝฟ็จ Pipeline Templates ็ฎก็ๅ ฑ็จๆต็จ
- ✔ ไฝฟ็จ include ๅๅๅคงๅ CI ๆไปถ
- ✔ ไฝฟ็จ Dynamic Environments ๅ preview
- ✔ ไฝฟ็จ GitOps ่ชๅๅไฝ็ฝฒ(ArgoCD/Flux)
- ✔ ไฝฟ็จ Multi-stage pipelines ๆงๅถ CI ็ตๆง
- ✔ ไฝฟ็จ Environment-specific configs ๅๆต่จญๅฎ
็ถไฝ ๆ GitLab CI/CD ไปฅ「ๅนณๅฐๅ」、「ๆจก็ตๅ」็ๆนๅผๅปบ็ฝฎไนๅพ, ๅฐฑ่ฝ้ๅฐไผๆฅญ็ด็ DevOps ่ฝๅ,่ฎไปปไฝๅฐๆก้ฝ่ฝๅฟซ้、ๅฎๅ จ、่ชๅๅฐๅฎๆ้จ็ฝฒ。
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ