๐ GitLab CI/CD ้ฒ้:Artifacts、Stages、Environment、Blue-Green、Canary ๅฏฆๆฐๅฎๆดๆๅ
ๅปถ็บๅ ๅ็ GitLab CI/CD ๅ ฅ้่ Docker ่ชๅ้จ็ฝฒ็ฏ,ๆฌ็ฏๅฐๆญฃๅผ้ฒๅ ฅไผๆฅญ็ด็ CI/CD ๆถๆง,ๆทฑๅ ฅ่งฃๆ:
- ๐ฆ Artifacts:ๆงๅปบ็ข็ฉ็ฎก็(Build → Test → Deploy)
- ๐ Stages:ๅค้ๆฎต Pipeline ่จญ่จ
- ๐ Environment:็ฐๅขๆงๅถ(Dev / Test / Staging / Prod)
- ๐ Blue-Green Deployment:้ถๅๆฉ้จ็ฝฒ
- ๐ก Canary Deployment:็พๅๆฏๆต้้จ็ฝฒ
- ๐งช Review Apps:MR ่ชๅๅปบ็ซๆซๆ็ฐๅข
ๆญค็ฏๅฑฌๆผ「ไผๆฅญ็ด GitLab CI/CD ้ฒ้ๆๅญธ」,ๅฏ็ดๆฅๆ็จๆผไธญๅคงๅ้็ผๅ้、SaaS、ๅพฎๆๅ็ฐๅข。
๐ ็ฌฌไธ็ซ :CI/CD ้ฒ้ๆถๆง็ธฝ่ฆฝ
ไปฅไธๆฏไผๆฅญๅธธ็จ็ๅฎๆด CI/CD ๆต็จ:
Commit → Lint → Build → Test → Security Scan → Package → Deploy Staging → Deploy Prod
้ไธๅ่ฆ็ด ๆฏๆ ธๅฟ:
- ๐ฆ Artifacts — ๅ้ๆฎตๅ ฑ็จๅปบ็ฝฎ็ข็ฉ
- ๐งฑ Stages — ๆ้ ๅบ็ๅท่ก้ๆฎต
- ๐ Environment — ้จ็ฝฒ็ฐๅข็ฎก็
๐ฆ ็ฌฌไบ็ซ :Artifacts — ๆต็จ้ๅณ้ Build ็ตๆ
CI/CD ๅจ Build → Test → Deploy ไน้ๅณ้ๆชๆก,ๅฟ ้ ไฝฟ็จ artifacts。
2.1 ๅบๆฌ็ฏไพ
build_app:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
2.2 ๅธธ่ฆ็จ้
- ๅ็ซฏ dist/
- ๅพ็ซฏ compile ็ตๆ
- terraform plan
- dockerfile build logs
๐ ็ฌฌไธ็ซ :Stages — ๅค้ๆฎต Pipeline ่จญ่จ
Stages ๅฎ็พฉๆดๅ Pipeline ๅท่ก้ ๅบ。
3.1 ๅธธ่ฆ Multi-Stage ่จญ่จ
stages:
- lint
- build
- test
- package
- staging
- production
3.2 ๆฏๅ stage ๅฟ ้ ๆๅๆ่ฝ้ฒไธไธ้ๆฎต
่ฅ test ๅคฑๆ → package/staging/production ้ฝไธๆๅท่ก。
๐ ็ฌฌๅ็ซ :Environment — ๅค็ฐๅข้จ็ฝฒ(Dev/Test/Prod)
GitLab ๅฏไปฅๅปบ็ซ Environment ไพ้จ็ฝฒไฝฟ็จ:
4.1 ๅบๆฌไพๅญ
deploy_staging:
stage: staging
environment:
name: staging
url: https://staging.example.com
script:
- bash deploy.sh staging
4.2 ๅค็ฐๅข Variables(ๅผท็ๆจ่ฆ)
ๆผ GitLab ่จญ็ฝฎ:
-STAGING_DB
- STAGING_API_KEY
- PRODUCTION_DB
ๆญ้
:
environment:
name: production
GitLab ๆ่ชๅไฝฟ็จ่ฉฒ Environment ็่ฎๆธ,้ฟๅ
ๆๅ่ชฟๆด้ฏ่ชค。
๐ ็ฌฌไบ็ซ :Blue-Green Deployment — ้ถๅๆฉ้จ็ฝฒ
Blue-Green ๆฆๅฟต:ๅปบ็ซๅ ฉๅ Production ็ฐๅข(Blue ่ Green)。 ๆดๆฐๆๅชๆดๆฐๅฆไธๅ็ฐๅข → ๆธฌ่ฉฆๆๅๅพๅๆต้。
5.1 ๅ ธๅๆถๆง(Nginx / Load Balancer)
Blue ← ๆญฃๅจๆไพๆๅ
Green ← ๆฐ็ๆฌๆบๅๅฅฝ,็ญๅพ
ๅๆ
5.2 GitLab CI ๅฏฆไฝ
deploy_blue:
stage: production
environment:
name: blue
script:
- docker compose -f docker-compose.blue.yml up -d
deploy_green:
stage: production
environment:
name: green
script:
- docker compose -f docker-compose.green.yml up -d
5.3 ๅๆๆต้
switch_traffic:
stage: production
script:
- ln -sf /etc/nginx/sites-enabled/green.conf /etc/nginx/sites-enabled/active.conf
- nginx -s reload
้ๆฏๅจๅคๆธไผๆฅญๆๅธธ็จ็่็ถ ้จ็ฝฒๆจกๅผ。
๐ก ็ฌฌๅ ญ็ซ :Canary Deployment — ้ๆญฅๆต้้ๅบ
Canary Deployment ็ฎ็:ๅ ๅฐๅฐ้จๅๆต้็ตฆๆฐ็ๆฌ。
6.1 ๆต้ๅ้ ็ฏไพ(Nginx)
split_clients "${remote_addr}" $upstream {
10% "canary";
* "stable";
}
6.2 GitLab CI Canary ่จญๅฎ
deploy_canary:
stage: production
environment:
name: production
deployment_tier: canary
script:
- bash deploy.sh canary
6.3 Canary → Promote ๆต็จ
promote_to_stable:
stage: production
script:
- bash promote.sh
Canary ้ฉๅ API、SaaS ๆๅ็ๆผธ้ฒๅผๆดๆฐ。
๐งช ็ฌฌไธ็ซ :Review Apps(MR ่ชๅ็ๆๆธฌ่ฉฆ็ฐๅข)
Review Apps ๆฏๆฌก Merge Request ้ฝ่ชๅๅปบ็ซ็จ็ซๆธฌ่ฉฆ็ฐๅข。
7.1 ่จญๅฎๆนๅผ
review_app:
stage: staging
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://review-$CI_COMMIT_REF_SLUG.example.com
script:
- bash deploy_review.sh
only:
- merge_requests
7.2 ็ถ MR ้้ๆ่ชๅๅช้ค
environment:
on_stop: stop_review
้ๆฏๅคงๅๅ้ๆๅธธ็จ็ๆต็จ。
๐ ็ฌฌๅ ซ็ซ :ๅฎๆด้ฒ้็ .gitlab-ci.yml(ๅฏ็ดๆฅ็จ)
stages:
- lint
- build
- test
- package
- staging
- canary
- production
lint:
stage: lint
script:
- npm run lint
build:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- dist/
test:
stage: test
script:
- npm test
package:
stage: package
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy_staging:
stage: staging
environment:
name: staging
script:
- bash deploy.sh staging
deploy_canary:
stage: canary
environment:
name: production
deployment_tier: canary
script:
- bash deploy.sh canary
only:
- main
deploy_production:
stage: production
environment:
name: production
script:
- bash deploy.sh stable
only:
- main
๐ ็ฌฌไน็ซ :ๆไฝณๅฏฆๅ(ไผๆฅญไฝฟ็จๅปบ่ญฐ)
- ๐ซ Production ๅผทๅถ MR ๆ่ฝๅไฝต(็ฆๆญข็ดๆฅๆจ main)
- ๐ ไฝฟ็จ Protected Variables ็ฎก็้้ฐ่็ฐๅข่จญๅฎ
- ๐ฆ Artifact retention ้ไพๅฐๆก่ชฟๆด(้ฟๅ ไฝ็ฉบ้)
- ๐งช Canary + Monitoring(ๅฟ ๅ็ฃๆง)
- ๐ Blue-Green ็จๆผๅคง็ๆฌๆดๆฐ,Canary ็จๆผ API ๅฐๆดๆฐ
๐ ็ต่ช
ๆฌ็ฏๅฎๆด่งฃๆ GitLab CI/CD ็้ฒ้้จ็ฝฒๆฆๅฟต:Artifacts、Stages、Environment、Blue-Green、Canary、Review Apps。 ้ไบๅ่ฝ็ตๅ่ตทไพๅพ,ๅฐ่ฝๆฏๆๅคงๅ็ณป็ตฑ、ๅพฎๆๅๆถๆงไปฅๅๅค็ฐๅขไฝ็ฝฒ็ฎก็ท,ๆฏไผๆฅญ้จ็ฝฒไธๅฏๆ็ผบ็ DevOps ่ฝๅ。
ไธไธ็ฏๅฐๆจๅบ: 《GitLab Runner ้ซๆ็ฎก็:Docker Executor、Cache、Scaling Runner、Auto DevOps ๆทฑๅ ฅ่งฃๆ》
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ