๐ ็บไป้บผ่ฆไฝฟ็จ Dynamic Environments、Blue-Green ่ Canary?
ๅคง้จๅๅ้ๅจๅฐๅ ฅ GitLab CI/CD ๅๆ,ๅชๆฏๅฎ็ดๆ็จๅผ build、test、deploy ๅฐไธๅๅบๅฎ็ฐๅข(ๅฆ staging、production), ้ทๆไธไพๆ้ๅฐๅนพๅ็้ป:
- ๆฏๅ Merge Request ้ฝ่ฆๆๅไฝ็ฝฒๅฐ「ๅ ฑๅๆธฌ่ฉฆๆฉ」,ๅฎนๆๆๆถ。
- ไธ็ท้ฝๆฏ「ไธๆฌกๆงๅๆ」:ไธๆฆๅบ้ฏ,ๅช่ฝ็ทๆฅ Rollback。
- ็ผบๅฐๆผธ้ฒๅผ(Canary)่ Blue-Green ๆฉๅถ,้ขจ้ช้ฃไปฅๆงๅถ。
ๆฌ็ฏๆไปฅๅฏฆๅ่งๅบฆ่ชชๆๅฆไฝๅจ GitLab CI ่ฃๅฐๅ
ฅ:
Dynamic Environments、Preview Apps、Blue-Green ้จ็ฝฒ、Canary Release,
ไธฆๆไพๅฏ็ดๆฅๆน็จ็ .gitlab-ci.yml ็ฏไพ。
๐ ๆ ธๅฟๆฆๅฟต็ธฝๆด็
- Static Environment: ๅบๅฎๅ็จฑ,ไพๅฆ
staging、production。 - Dynamic Environments: ไพ
$CI_COMMIT_REF_SLUGๆ$CI_MERGE_REQUEST_IID็ญๅๆ ๅปบ็ซ็็ฐๅข。 - Review App: ๆฏๅๅๆฏ / MR ้ฝๆ่ชๅทฑ็ๆธฌ่ฉฆ็ถฒๅ,ๆนไพฟ PM、QA、่จญ่จ review。
- Blue-Green: ็ถญๆๅ ฉๅ production ็ฐๅข(blue / green),ไบคๆฟๆฅๆๆต้,้ไฝ้จ็ฝฒ้ขจ้ช。
- Canary Release: ้ๆญฅๅขๅ ๆต้,ไพๅฆ 10% → 50% → 100%,้็จไธญๅฏ้จๆๅๆญข。
๐ ๅบ็ค:ๅจ GitLab CI ไธญๅฎ็พฉ็ฐๅข(environment)
ๅ ๅพๆๅบๆฌ็ static environment ้ๅง:
deploy_staging:
stage: deploy
script:
- ./deploy.sh staging
environment:
name: staging
url: https://staging.example.com
deploy_production:
stage: deploy
script:
- ./deploy.sh production
environment:
name: production
url: https://www.example.com
on_stop: stop_production
GitLab UI ๆ่ชๅๅปบ็ซ「็ฐๅข」้ ็ฑค,ๅฏ็ๅฐๆฏๆฌก้จ็ฝฒ็ๆ 、URL ่ Rollback ็ด้。
๐ Dynamic Environments ่ Review Apps
1. ไพๅๆฏๅปบ็ซ Dynamic Environment
review_app:
stage: deploy
script:
- ./deploy_review.sh "$CI_COMMIT_REF_SLUG"
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://$CI_COMMIT_REF_SLUG.review.example.com
on_stop: stop_review_app
rules:
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main"'
2. ๅ็จ Review App(on_stop Job)
stop_review_app:
stage: deploy
script:
- ./cleanup_review.sh "$CI_COMMIT_REF_SLUG"
environment:
name: review/$CI_COMMIT_REF_SLUG
action: stop
rules:
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main"'
when: manual
้ๆจฃๅจ Merge Request ้ ้ขๆๅบ็พไธ้ก「Open live environment」ๆ้, Reviewer ๅฏไปฅ็ดๆฅ้ป้ฒๅปๆธฌ่ฉฆ่ฉฒๅๆฏ็ๅฏฆ้็ซ้ข。
3. ไพ Merge Request ๅปบ็ซ Review App(ๆจ่ฆ)
review_app:
stage: deploy
script:
- ./deploy_review.sh "mr-$CI_MERGE_REQUEST_IID"
environment:
name: review/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID.review.example.com
on_stop: stop_review_app
rules:
- if: '$CI_MERGE_REQUEST_IID'
๐ Blue-Green Deployment:ๅ ฉๅฅ production ไบคๆฟๅๆ
ๅธธ่ฆๅๆณๆฏ็ถญๆ production-blue ่ production-green ๅ
ฉ็ต็ฐๅข,
ๅฏฆ้ๆต้็ฑ Load Balancer / Gateway ๆง็ฎก(ไพๅฆ Nginx、HAProxy、Cloud Load Balancer)。
1. ๅปบ็ซ Blue / Green ๅ ฉๅ็ฐๅข
.deploy_production_template:
stage: deploy
script:
- ./deploy_prod.sh "$TARGET_SLOT"
environment:
name: $ENV_NAME
url: $ENV_URL
when: manual
allow_failure: false
deploy_blue:
extends: .deploy_production_template
variables:
TARGET_SLOT: blue
ENV_NAME: production-blue
ENV_URL: https://blue.example.com
deploy_green:
extends: .deploy_production_template
variables:
TARGET_SLOT: green
ENV_NAME: production-green
ENV_URL: https://green.example.com
2. ๅๆๆต้(็ฑ LB / DNS ๆงๅถ)
ๆฅ่ๅฏไปฅๅจ CI ่ฃกๅ ไธๅ Job ๅปๅผๅซ LB API ๆ Ansible:
switch_to_blue:
stage: deploy
script:
- ./switch_traffic.sh blue # ไพๅฆไฟฎๆน Nginx upstream ๆ DNS
when: manual
needs: ["deploy_blue"]
switch_to_green:
stage: deploy
script:
- ./switch_traffic.sh green
when: manual
needs: ["deploy_green"]
ๅฏฆๅไธๆๅ
้จ็ฝฒๅฐๅฆๅคไธ้(ๅฆ blue),
็ขบ่ชๆฒๅ้กๅพๅๅท่ก switch_to_blue ๆๆต้ๅๆ้ๅป;
้ๅฐๅ้กๆ,ๅช่ฆๅท่ก switch_to_green ๅณๅฏๅฟซ้ๅๅพฉ。
๐ Canary Release:10% → 50% → 100% ๆผธ้ฒๅผไธ็ท
Canary ๅๅธ้้ปๅจ「ๅๆน」:
- ๅ ่ฎไธๅฐ้จไปฝไฝฟ็จ่ ไฝฟ็จๆฐ็ๆฌ(10%)。
- ่งๅฏ้ฏ่ชค็、ๅปถ้ฒ、ไฝฟ็จ่ ๅ้ฅ。
- ็ขบ่ช็ฉฉๅฎๅพๅ้ๆญฅๆพๅคงๆต้ๅฐ 50%、100%。
ๅจ GitLab ไธญๅฏไปฅ็จๅคๅ Canary Job ่กจ้ไธๅ้ๆฎต, ๅฏฆ้ๆต้ๆฏไพไบค็ตฆ Kubernetes / Ingress / Service Mesh(ๅฆ Istio、NGINX Ingress)。
็ฏไพ:ไธ้ๆฎต Canary Pipeline
deploy_canary_10:
stage: deploy
script:
- ./deploy_canary.sh 10 # 10% ๆต้
environment:
name: production-canary
url: https://www.example.com
when: manual
deploy_canary_50:
stage: deploy
script:
- ./deploy_canary.sh 50 # 50% ๆต้
environment:
name: production-canary
when: manual
needs: ["deploy_canary_10"]
deploy_canary_100:
stage: deploy
script:
- ./deploy_canary.sh 100 # 100%:่ๆญฃๅผ็ไธ่ด
environment:
name: production
url: https://www.example.com
when: manual
needs: ["deploy_canary_50"]
ๅฏไปฅไพๅ้ๆ็ๅบฆ่ชฟๆด้ๆฎตๆธ้่ๆขไปถ, ไพๅฆๅจ 10% ้ๆฎตๆๅฟ ้ ็ฑ SRE / PM ๅ ฑๅ็ขบ่ชๅพๆๅ ่จฑๅพ 50%。
๐ ่ชๅๆธ ็ Dynamic Environments:้ฟๅ ็็ธๆไธๅ ็ฐๅข
ๅคง้ไฝฟ็จ Review Apps ไนๅพ,ๅพๅฟซๆๆๅนพๅ็่ณไธ็พๅ็ฐๅข, ๅ ๆญคไธๅฎ่ฆๆญ้ :
on_stopJob: MR ้้ๆ่ชๅๆธ ็。auto_stop_in: ้ๆ่ชๅๅๆญข็ฐๅข。
็ฏไพ:7 ๅคฉๅพ่ชๅๅๆญข Review App
review_app:
stage: deploy
script:
- ./deploy_review.sh "mr-$CI_MERGE_REQUEST_IID"
environment:
name: review/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID.review.example.com
on_stop: stop_review_app
auto_stop_in: 7 days
rules:
- if: '$CI_MERGE_REQUEST_IID'
๐ ่ Kubernetes / GitOps ๆดๅ็ๅ ธๅๆจกๅผ
่ฅๅฐๆกๅทฒ็ถไฝฟ็จ Kubernetes,ๅฏๅฐ GitLab CI ็ Deploy Job ๆน็บ:
- ็ดๆฅ
kubectl applyๆ Helm - ๆไฝฟ็จ Argo CD / Flux ๅ GitOps,ๅๆญฅๅฐ K8s
deploy_review_k8s:
stage: deploy
image: bitnami/kubectl:latest
script:
- kubectl config use-context "$KUBE_CONTEXT"
- kubectl apply -f k8s/overlays/review/"$CI_COMMIT_REF_SLUG"
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://$CI_COMMIT_REF_SLUG.review.example.com
Canary / Blue-Green ็ๆต้ๅ้ , ๅๅฏไปฅไบค็ตฆ K8s Ingress、Service Mesh,ๆ External LB ็ฎก็。
๐ ๅฏฆๅๆไฝณๅๆณๆธ ๅฎ
- ไธ้ๅงๅ ๅ็จ Review Apps,ๆๅๅไฝ้ซ้ฉ。
- ๅทฒ็ถๆ็ฉฉๅฎ staging / production ๅๅฐๅ ฅ Blue-Green。
- ้ซ้ขจ้ชๅ่ฝๆๆ ธๅฟ็ณป็ตฑๆไฝฟ็จ Canary Release。
- ๆ้จ็ฝฒ่
ณๆฌๆฝๆๅ
ฑไบซ template(
.deploy_template),้ฟๅ ้่ค。 - ๆๆ่ณ่จ(Token、้้ฐ)ๅ จ้จๆพๅจ GitLab CI/CD Variables。
- ็ฟๆ
ฃๅจ deploy Job ่จญ
when: manual+only / rulesๆง็ฎก่งธ็ผๆขไปถ。
๐ ๅปถไผธ้ฑ่ฎ
- ๐ GitLab CI/CD ๆไฝณๅฏฆๅ(้ฒ้็ฏ):Artifacts、Cache、Stages、่ๅฎๅ จๆง็ญ็ฅ
- ๐ GitLab CI/CD ้ฒ้้จ็ฝฒ:Artifacts、Blue-Green ่ Canary ็ญ็ฅ
- ๐ GitLab ้ฒ้ CI/CD Template:Dynamic Env ่ GitOps ๆดๅ
- ๐ GitLab CI + Docker:Runner、Registry ่ Compose ้จ็ฝฒๅฏฆๆฐ
- ๐ GitLab CI/CD ๅ ฅ้:Runner、Pipeline ่ๅบๆฌ้จ็ฝฒๆต็จ
- ๐ GitLab CI/CD Best Practices:ๅฏฆๅๆไฝณๅๆณ็ธฝๆด็
๐ฌ ๆญก่ฟๅจไธๆน็่จ่จ่ซ!
ไฝ ็ฎๅ็ GitLab Pipeline ๆไฝฟ็จ Dynamic Environments、Blue-Green ๆ Canary ๅ?
ๆญก่ฟๅไบซไฝ ็ๅฏฆไฝๆนๅผ、่ธฉ้ท็ถ้ฉๆๆณๅชๅ็ๅฐๆน,ไธ่ตทไบคๆต DevOps ๅฏฆๅ!๐
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ