Để 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èmstart_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