Phần 8 — Environments, Deployments và Review Apps
Ý kiến
0
Chưa có ý kiến nào. Hãy là người đầu tiên chia sẻ!
Chưa có ý kiến nào. Hãy là người đầu tiên chia sẻ!
Pipeline production Next.js → Docker → K8s với cache image, manual approval. Tổng kết best practices và kỹ thuật debug (CI Lint, visualizer, CI_DEBUG_TRACE).
Tái sử dụng pipeline giữa nhiều dự án với include (local, project, template, remote), kế thừa job với extends (hidden job), và YAML anchors.
Scale CI bằng Kubernetes executor: mỗi job sinh ra một pod, chạy xong huỷ. Triển khai GitLab Runner Helm chart trên K8s cluster.
Series GitLab CI/CD Toàn Tập — 9 phần:
Phần 1 — Tổng quan: GitLab CI/CD, kiến trúc và các khái niệm
Phần 2 — .gitlab-ci.yml đầu tiên và Variables (predefined, UI, masked)
Phần 5 — GitLab Runner self-hosted: cài đặt và executors (Shell/Docker)
Phần 8 — Environments, Deployments và Review Apps ← bạn đang đọc
Phần 9 — Pipeline thực tế Next.js → Docker → K8s + best practices + debug
GitLab phân biệt rõ build job và deployment job qua khai báo environment:. Việc khai báo này không chỉ trang trí — GitLab dùng nó để theo dõi lịch sử deploy, cung cấp nút rollback, và đặc biệt là kích hoạt Review Apps — tính năng signature cho phép mỗi merge request tự deploy preview lên Kubernetes/Docker, QA bấm link là xem được ngay.
GitLab phân biệt rõ build job và deployment job. Khai báo environment: để GitLab theo dõi:
deploy-staging:
stage: deploy
script:
- ./deploy.sh staging
environment:
name: staging
url: https://staging.example.com
deployment_tier: staging
rules:
- if: $CI_COMMIT_BRANCH == "main"
deploy-prod:
stage: deploy
script:
- ./deploy.sh production
environment:
name: production
url: https://example.com
deployment_tier: production
rules:
- if: $CI_COMMIT_TAG
when: manual
resource_group: production # Mutex — chặn 2 deploy đồng thời
Vào Operate → Environments, bạn sẽ thấy lịch sử deploy của từng environment, link tới commit/job, nút Rollback để re-trigger deploy của một commit cũ.
resource_group rất quan trọng cho production — nó tạo mutex, đảm bảo chỉ 1 deploy chạy mỗi lần. Hai MR merge sát nhau sẽ deploy tuần tự thay vì đè nhau.
Tính năng signature của GitLab. Mỗi merge request tự deploy bản preview lên Kubernetes/Docker, QA bấm link xem trực tiếp.
deploy-review:
stage: deploy
image: alpine/k8s:1.30
script:
- kubectl apply -f k8s/review.yml -n review-$CI_MERGE_REQUEST_IID
environment:
name: review/$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID.review.example.com
on_stop: stop-review # Job dọn dẹp khi MR close
auto_stop_in: 7 days # Tự dọn sau 7 ngày inactive
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
stop-review:
stage: deploy
image: alpine/k8s:1.30
script:
- kubectl delete namespace review-$CI_MERGE_REQUEST_IID
environment:
name: review/$CI_MERGE_REQUEST_IID
action: stop
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual
allow_failure: true
GitLab tự hiện link trong MR ngay khi job deploy xong. Khi MR đóng, GitLab tự gọi stop-review để dọn dẹp tài nguyên.
Trong phần này bạn đã nắm:
environment.name + url để GitLab theo dõi; vào Operate → Environments có lịch sử deploy + nút Rollback.
resource_group: production tạo mutex — chặn 2 deploy production đồng thời khi 2 MR merge gần nhau.
Review Apps dùng $CI_MERGE_REQUEST_IID trong environment name để mỗi MR có namespace/URL riêng.
on_stop + auto_stop_in: 7 days để GitLab tự dọn môi trường tạm khi MR đóng hoặc inactive.
Trong Phần 9 (cuối series), ta dựng pipeline production hoàn chỉnh Next.js → Docker → K8s, kèm best practices và kỹ thuật debug khi pipeline lỗi.
Phần 9: Pipeline thực tế Next.js → Docker → K8s + best practices + debug →