Cấu hình tác vụ định kỳ trong Jenkinsfile

Trong Jenkins Pipeline, việc triển khai thường được kích hoạt thủ công — phù hợp với môi trường production. Tuy nhiên, ở các môi trường như staging hay testing, nên tích hợp mức độ tự động cao hơn để giảm gánh nặng quản lý build cho developer. Cơ chế này được thiết lập thông qua khối triggers trong Jenkinsfile.

Các loại trigger hỗ trợ

1. Cron

Sử dụng cú pháp tương tự cron trên Linux để lên lịch thực thi pipeline định kỳ:

pipeline {
    agent any
    triggers {
        cron('H */4 * * *') // Chạy mỗi 4 giờ
    }
    stages {
        stage('Scheduled Build') {
            steps {
                echo 'Đang thực hiện build theo lịch trình'
            }
        }
    }
}

2. Poll SCM

Kiểm tra thay đổi trong kho mã nguồn theo chu kỳ và kích hoạt build nếu phát hiện commit mới:

pipeline {
    agent any
    triggers {
        pollSCM('H/15 * * * *') // Kiểm tra mỗi 15 phút
    }
    stages {
        stage('SCM Polling') {
            steps {
                echo 'Phát hiện thay đổi trong repository'
            }
        }
    }
}

3. Upstream

Kích hoạt pipeline khi dự án upstream hoàn thành với trạng thái xác định:

triggers {
    upstream(
        upstreamProjects: 'backend-service,db-migration',
        threshold: hudson.model.Result.SUCCESS
    )
}

Các giá trị trạng thái hợp lệ từ hudson.model.Result:

  • ABORTED: Tác vụ bị hủy thủ công
  • FAILURE: Build thất bại
  • SUCCESS: Build thành công
  • UNSTABLE: Có cảnh báo nhưng không lỗi nghiêm trọng
  • NOT_BUILT: Giai đoạn không được thực thi do phụ thuộc

4. Kích hoạt từ GitLab

Yêu cầu cài đặt plugin GitLab (không cần GitLab Hook Plugin). Cấu hình webhook trên GitLab trỏ đến endpoint Jenkins kèm token bảo mật.

pipeline {
    agent any
    triggers {
        gitlab(
            triggerOnPush: true,
            triggerOnMergeRequest: false,
            branchFilterType: 'NameBasedFilter',
            includeBranchesSpec: 'main,develop',
            secretToken: "${GITLAB_WEBHOOK_TOKEN}"
        )
    }
    stages {
        stage('Build on Push') {
            steps {
                echo 'Tự động build khi push code'
            }
        }
    }
}

Hai chế độ lọc nhánh chính:

  • NameBasedFilter: Chỉ định nhánh cụ thể
    • includeBranchesSpec: Danh sách nhánh được phép (phân cách bằng dấu phẩy)
    • excludeBranchesSpec: Danh sách nhánh bị loại trừ
  • RegexBasedFilter: Sử dụng biểu thức chính quy
    • sourceBranchRegex: Ví dụ feature/.* hoặc release-\d+\.\d+

Lưu ý quan trọng: Jenkins chỉ áp dụng cấu hình trigger sau khi pipeline được thực thi ít nhất một lần thủ công.

Thẻ: Jenkins pipeline gitlab CICD DevOps

Đăng vào ngày 23 tháng 6 lúc 11:20