GitLab CI/CD: viết file .gitlab-ci.yml với pipeline nhiều giai đoạn

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Nếu dự án của bạn nằm trên GitLab, bạn đã có sẵn hệ thống CI/CD mạnh mẽ. Chỉ cần thêm một file .gitlab-ci.yml ở thư mục gốc, GitLab sẽ tự chạy pipeline mỗi khi có thay đổi. Bài này hướng dẫn xây một pipeline ba giai đoạn rõ ràng.

Các khái niệm cần biết

  • Pipeline: toàn bộ quy trình tự động cho một lần đẩy code.
  • Stage: giai đoạn, ví dụ build, test, deploy. Các stage chạy lần lượt.
  • Job: công việc cụ thể trong một stage. Các job cùng stage có thể chạy song song.
  • Runner: máy thực sự chạy job. GitLab.com có runner dùng chung, bản tự cài thì bạn đăng ký runner của riêng mình.
  • Artifacts: file kết quả của một job được truyền cho các job sau.

Pipeline mẫu cho ứng dụng Node.js

image: node:20-alpine

stages:
  - build
  - test
  - deploy

cache:
  key:
    files:
      - package-lock.json
  paths:
    - node_modules/

build:
  stage: build
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 day

test:
  stage: test
  script:
    - npm ci
    - npm test

deploy_staging:
  stage: deploy
  script:
    - echo 'Trien khai len staging'
  environment:
    name: staging
  rules:
    - if: $CI_COMMIT_BRANCH == 'main'

Giải thích các phần chính

image chọn image Docker để chạy job, nên môi trường luôn nhất quán. stages định thứ tự giai đoạn. cache lưu thư mục thư viện giữa các lần chạy, khóa theo nội dung package-lock.json để cache tự làm mới khi thư viện đổi. artifacts giữ lại thư mục dist để các job sau hoặc người dùng tải xuống.

Phần rules quyết định khi nào job chạy. Ở trên, job triển khai chỉ chạy khi đẩy lên nhánh main. Biến $CI_COMMIT_BRANCH là biến có sẵn do GitLab cung cấp.

Biến và bí mật

Vào Settings, mục CI/CD, phần Variables để khai báo khóa API hoặc mật khẩu. Bạn có thể đánh dấu biến là masked (che khỏi log) và protected (chỉ dùng ở nhánh được bảo vệ). Trong script, dùng $TEN_BIEN như biến môi trường thông thường.

Cache và artifacts khác nhau thế nào?

  • Cache: tăng tốc, tái sử dụng giữa các pipeline. Không đảm bảo luôn có, nên job phải chạy đúng cả khi thiếu cache.
  • Artifacts: kết quả đầu ra có chủ đích, đảm bảo truyền sang các job sau trong cùng pipeline.

Triển khai thủ công có kiểm soát

Với môi trường production, nhiều đội thích bấm nút xác nhận. Thêm when: manual vào job deploy production và job sẽ chờ một người bấm chạy:

deploy_production:
  stage: deploy
  script:
    - echo 'Trien khai len production'
  environment:
    name: production
  when: manual
  rules:
    - if: $CI_COMMIT_BRANCH == 'main'

Mẹo gỡ lỗi pipeline

  1. Dùng công cụ CI Lint trong giao diện GitLab để kiểm tra cú pháp trước khi đẩy.
  2. Đọc log job từ trên xuống, lỗi đầu tiên thường là nguyên nhân thật.
  3. Thử các lệnh của script ngay trên máy bằng đúng image đó với Docker.
  4. Giữ script ngắn; việc phức tạp hãy đưa vào file shell trong kho mã.

Kết luận

GitLab CI/CD dễ tiếp cận nhờ tích hợp sâu trong nền tảng. Hãy bắt đầu với hai stage build và test, chạy ổn rồi mới thêm deploy. Một pipeline nhỏ nhưng đáng tin còn hơn một pipeline lớn hay hỏng.

Để thực hành pipeline hoàn chỉnh có triển khai lên máy chủ, bạn có thể tìm các bài học phù hợp tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment