Jenkins Multibranch Pipeline 定时触发
Multibranch Pipeline 和普通 Pipeline 最大的区别是 – 定时构建不能直接在 Jenkinsfile 用 cron 触发全部分支!
必须区分 两种层面的定时任务:
你需要的是:
-> 配置 Scan Multibranch Pipeline Triggers
-> 配置 在 Jenkinsfile 中设置 cron(每个分支独立定时)
-> 需要开启 Periodically if not otherwise run
下面逐条配置
这不是构建 Pipeline,而是扫描 Repo。
路径:
Jenkins -> 你的 Multibranch Pipeline Job -> Configure
找到:
Scan Multibranch Pipeline Triggers
勾选:
Periodically if not otherwise run
填写 cron,如:
H/5 * * * *
意思是:每 5 分钟扫描仓库
📌 作用:
- 仓库新增 branch -> 自动创建新 Job
- 仓库删除 branch -> 自动删除对应分支的 Job
- 分支的 Jenkinsfile 修改 -> 自动更新 Pipeline 定义
注意:这个只控制扫描,不构建分支!
在 每个分支的 Jenkinsfile 里添加:
pipeline {
agent any
triggers {
cron('H 2 * * *')
}
stages {
stage('Run') {
steps {
echo "定时执行: ${env.BRANCH_NAME}"
}
}
}
}
效果:
- main 分支每天凌晨 2 点自动执行
- dev 分支每天凌晨 2 点自动执行
- hotfix 分支每天凌晨 2 点自动执行
- (只要该分支带有 Jenkinsfile)
要构建 tag 也可以用:
when {
buildingTag()
}
因为 Multibranch Pipeline 的根 Job 不会构建代码,只负责扫描分支,所有构建都发生在分支级 Job。
正确方式就是:每个分支写自己的 triggers { cron }。
如果你希望:
- main 每晚 2 点执行
- dev 每晚 2 点执行
- feature/** 一律每晚 2 点执行(建议排除)
那么必须在 Jenkinsfile 里加入 cron,并且在 Multibranch Pipeline 配置启用自动扫描。
组合方式:
pipeline {
agent any
triggers {
cron('H 2 * * *')
}
stages {
stage('Nightly Build') {
steps {
echo "夜间构建:${env.BRANCH_NAME}"
}
}
}
}
Scan Multibranch Pipeline Triggers -> 每小时扫描一次
这样:
- Jenkins 定期构建所有存在 Jenkinsfile 的分支
- Jenkins 会自动发现新增分支并加入定时任务
在 main 分支 Jenkinsfile:
pipeline {
triggers {
cron('H 2 * * *')
}
stages {
stage('Nightly') {
steps {
echo "main 分支定时构建"
}
}
}
}
在 dev、feature 等分支删掉 triggers {} 即可。
下面 3 种模式最常用:
Scan: H/5 * * * *
Jenkinsfile: 不写 cron
适用于 PR、CI
Scan: 每 10 分钟
main Jenkinsfile: 写 cron
其他分支: 不写 cron
适用于 nightly build
Scan: 每小时
所有 Jenkinsfile: 写 cron,总是 nightly build
适合 release/ 多环境部署