Phần 7 — include, extends, anchors — pipeline modular
Ý 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).
Khai báo environment để GitLab theo dõi deployments, có lịch sử và nút rollback. Review Apps — tính năng signature: mỗi MR tự deploy lên môi trường tạm.
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 7 — include, extends, anchors — pipeline modular ← bạn đang đọc
Phần 9 — Pipeline thực tế Next.js → Docker → K8s + best practices + debug
Khi có nhiều dự án cùng pattern pipeline, copy-paste .gitlab-ci.yml là một thảm hoạ bảo trì — sửa một chỗ phải update khắp nơi. GitLab có 3 cơ chế tái sử dụng: include (nhập config từ file/project/template/URL), extends (kế thừa job từ template), và YAML anchors (cú pháp YAML gốc). Trong thực tế, dùng include + extends là chính; anchors chỉ dùng khi cần.
include và extends — Tái sử dụng pipelineinclude — nhập config từ nơi khácinclude:
# File trong cùng repo
- local: '/ci/build.yml'
# File từ project khác
- project: 'org/ci-templates'
ref: 'v1.2.0'
file: '/templates/docker.yml'
# Template chính thức của GitLab
- template: 'Security/SAST.gitlab-ci.yml'
# File từ URL
- remote: 'https://example.com/ci/common.yml'
Tips: pin ref bằng version tag (v1.2.0) hoặc commit SHA — đừng dùng main. Nếu template thay đổi, pipeline có thể bị fail bất ngờ.
extends — kế thừa job.docker-build-template:
image: docker:24
services:
- docker:24-dind
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
variables:
DOCKER_TLS_CERTDIR: ""
build-frontend:
extends: .docker-build-template
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHA ./frontend
- docker push $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHA
build-api:
extends: .docker-build-template
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE/api:$CI_COMMIT_SHA ./api
- docker push $CI_REGISTRY_IMAGE/api:$CI_COMMIT_SHA
Job bắt đầu bằng dấu chấm (.docker-build-template) là job hidden — không chạy, chỉ để extends.
GitLab hỗ trợ cú pháp YAML anchor (&name, *name) — nhưng nói chung nên dùng extends vì rõ ràng hơn:
.cache-config: &cache_config
paths:
- node_modules/
key: $CI_COMMIT_REF_SLUG
build:
cache: *cache_config
script: pnpm build
test:
cache:
<<: *cache_config # Merge anchor
policy: pull # Override một field
script: pnpm test
Trong phần này bạn đã nắm:
include 4 nguồn: local (cùng repo), project (repo khác, pin ref), template (GitLab có sẵn), remote (URL).
extends: kế thừa job từ hidden job (tên bắt đầu bằng .) — không tự chạy, chỉ để kế thừa.
YAML anchors (&name, *name, <<:): cú pháp YAML chuẩn — dùng được nhưng nên ưu tiên extends vì rõ ràng hơn.
Quan trọng: pin ref bằng version tag (v1.2.0) hoặc commit SHA — không bao giờ main để tránh template thay đổi gây fail pipeline.
Trong Phần 8, ta đi vào Environments, Deployments và tính năng signature của GitLab: Review Apps — mỗi MR một môi trường tạm.