Cấu hình nâng cao cho pipeline GitLab CI/CD: tags, allow_failure, when, retry, timeout và parallel

Để kiểm soát chi tiết cách các job chạy trong pipeline GitLab CI/CD, bạn có thể sử dụng nhiều tùy chọn cấu hình linh hoạt. Dưới đây là hướng dẫn thực tế về các tham số quan trọng giúp tối ưu hóa quy trình tích hợp và triển khai.

Chỉ định runner cụ thể với tags

Bạn có thể gắn nhãn (tag) cho từng runner khi đăng ký, sau đó dùng các tag này để chỉ định job nào nên chạy trên runner nào. Ví dụ:

windows_build:
  stage: compile
  tags:
    - win-builder
  script:
    - echo "Xin chào, %USERNAME%!"

macos_build:
  stage: compile
  tags:
    - mac-runner
  script:
    - echo "Xin chào, $USER!"

Cho phép job thất bại không chặn pipeline với allow_failure

Khi bật tùy chọn này, job dù lỗi vẫn không làm dừng toàn bộ pipeline. Trạng thái pipeline sẽ hiển thị cảnh báo màu cam nhưng commit vẫn được đánh dấu là "passed".

integration_test:
  stage: verify
  script:
    - run_flaky_test.sh
  allow_failure: true

Điều kiện thực thi job với when

Thuộc tính này xác định thời điểm job được kích hoạt:

  • on_success: mặc định, chỉ chạy nếu tất cả job trước đó thành công.
  • on_failure: chạy khi có job trước đó thất bại.
  • always: luôn chạy bất kể trạng thái job trước.
  • manual: cần người dùng nhấn nút để bắt đầu.
  • delayed: trì hoãn thực thi, thường đi kèm start_in.

Thiết lập độ trễ với start_in

Chỉ áp dụng khi when: delayed. Hỗ trợ đơn vị như giây, phút, giờ, ngày.

notify_team:
  stage: notify
  script:
    - send_slack_alert.sh
  when: delayed
  start_in: '10 minutes'

Tự động thử lại job thất bại với retry

Có thể cấu hình số lần thử lại tối đa (từ 0 đến 2) và điều kiện thử lại dựa trên nguyên nhân lỗi.

flakey_job:
  stage: test
  script:
    - unstable_script.py
  retry:
    max: 2
    when:
      - script_failure
      - api_failure

Giới hạn thời gian chạy job với timeout

Thời gian tối đa job được phép chạy, có thể ghi đè cài đặt mức dự án nhưng không vượt quá giới hạn của runner.

long_task:
  script: process_large_dataset.sh
  timeout: 2h 45m

Chạy song song nhiều instance job với parallel

Tạo N bản sao của cùng một job chạy đồng thời (N từ 2 đến 50). Mỗi instance được đặt tên theo mẫu job_name i/N.

load_test:
  stage: stress
  script:
    - simulate_traffic.sh $CI_NODE_INDEX
  parallel: 4

Ví dụ tổng hợp cấu hình pipeline

stages:
  - build
  - test
  - scan
  - release

compile_app:
  stage: build
  tags:
    - java-runner
  script:
    - ./gradlew build
  timeout: 1h

unit_tests:
  stage: test
  script:
    - ./run_tests.sh
  allow_failure: true
  retry:
    max: 1
    when: [script_failure]
  when: delayed
  start_in: '30s'

security_scan:
  stage: scan
  script:
    - analyze_code.sh
  parallel: 3

production_deploy:
  stage: release
  script:
    - deploy_to_prod.sh
  when: manual

Thẻ: gitlab-ci gitlab-runner pipeline-configuration yaml-syntax CICD

Đăng vào ngày 25 tháng 7 lúc 02:37