🔥 Anh em DevOps/Automation chắc chắn sẽ gặp tình huống cần kiểm soát job trong GitLab CI/CD: chỉ chạy ở nhánh main, hoặc ngược lại, chỉ chạy khi build fail để cleanup môi trường.
GitLab CI cung cấp 2 “vũ khí” mạnh mẽ để điều khiển pipeline: only/except và when.
✅ GitLab CI: Only và Except
Ví dụ:
deploy: only: refs: - main
👉 Job deploy chỉ chạy khi merge vào nhánh main.
Bạn có thể mở rộng ra nhiều refs khác như devel, schedules…
✅ GitLab CI: When
Từ khóa when cho phép định nghĩa điều kiện thực thi job:
Ví dụ cleanup khi build fail:
cleanup_build_job: stage: cleanup_build script: - cleanup build on fail when: on_failure
✅ Kết hợp tất cả trong .gitlab-ci.yml
stages: - build - cleanup_build - test - deploy - cleanup build_job: before_script: make setup stage: build script: - make build cleanup_build_job: stage: cleanup_build script: - cleanup build on fail when: on_failure test_job: before_script: make setup stage: test script: - make test after_script: make cleanup_test deploy_job: stage: deploy script: - make deploy only: - main cleanup_job: stage: cleanup script: - cleanup after jobs when: always
Ở đây:
🎯 Key takeaway:
❓Câu hỏi ôn tập
Tệp nào định nghĩa pipeline trong GitLab CI/CD?
👉 Đáp án đúng: .gitlab-ci.yml
GitLab CI cung cấp 2 “vũ khí” mạnh mẽ để điều khiển pipeline: only/except và when.
✅ GitLab CI: Only và Except
- only: job chỉ chạy trên những refs (nhánh, tag, pipeline type) được khai báo.
- except: job chạy trên mọi nơi ngoại trừ refs được khai báo.
- Hỗ trợ Regex để match tên nhánh hoặc tag.
Ví dụ:
deploy: only: refs: - main
👉 Job deploy chỉ chạy khi merge vào nhánh main.
Bạn có thể mở rộng ra nhiều refs khác như devel, schedules…
✅ GitLab CI: When
Từ khóa when cho phép định nghĩa điều kiện thực thi job:
- on_success → chạy khi job trước đó thành công (mặc định).
- on_failure → chạy khi job trước đó fail.
- always → chạy bất kể kết quả ra sao.
- manual → job thủ công (thường dùng cho deploy production).
- delayed → chạy sau một khoảng delay.
Ví dụ cleanup khi build fail:
cleanup_build_job: stage: cleanup_build script: - cleanup build on fail when: on_failure
✅ Kết hợp tất cả trong .gitlab-ci.yml
stages: - build - cleanup_build - test - deploy - cleanup build_job: before_script: make setup stage: build script: - make build cleanup_build_job: stage: cleanup_build script: - cleanup build on fail when: on_failure test_job: before_script: make setup stage: test script: - make test after_script: make cleanup_test deploy_job: stage: deploy script: - make deploy only: - main cleanup_job: stage: cleanup script: - cleanup after jobs when: always
Ở đây:
- build_job chạy bình thường.
- Nếu build_job fail → cleanup_build_job sẽ chạy.
- deploy_job chỉ chạy khi branch là main.
- cleanup_job luôn chạy cuối pipeline để dọn môi trường.
🎯 Key takeaway:
- Dùng only/except để kiểm soát phạm vi chạy job.
- Dùng when để kiểm soát điều kiện chạy job.
❓Câu hỏi ôn tập
Tệp nào định nghĩa pipeline trong GitLab CI/CD?
👉 Đáp án đúng: .gitlab-ci.yml