Triggers:cron、pollSCM、upstream 与 build 触发
Triggers:cron、pollSCM、upstream 与 build 触发
triggers 指令定义 Pipeline 自动重新触发的方式,只能写在 pipeline 块下。Jenkins 内置三种:cron、pollSCM、upstream,其它方式靠插件。如果已经接了 GitHub / GitLab 的 webhook,通常就不需要 triggers 了。
定时执行:cron
像 crontab 一样到点就跑,常用于夜间构建这种周期性任务:
pipeline {
agent any
triggers {
cron('H */4 * * 1-5')
}
stages {
stage('Example') {
steps { echo 'Hello World' }
}
}
}
Jenkins 的 cron 语法和系统 cron 基本一致,5 个字段以空格或 TAB 分隔:
| 字段 | 含义 | 取值 |
|---|---|---|
| 1 | 分钟 | 0–59 |
| 2 | 小时 | 0–23 |
| 3 | 日 | 1–31 |
| 4 | 月 | 1–12 |
| 5 | 星期 | 0–7(0 和 7 都是周日) |
每个字段的运算符,按优先级:
*匹配所有值M-N匹配 M 到 N 之间M-N/X或*/X在范围内以 X 为步长A,B,...,Z枚举多个值
还支持 @yearly、@monthly、@weekly、@daily、@midnight、@hourly 这些别名。它们用 hash 系统自动错峰——@hourly 等价于 H * * * *,代表这一小时内的某个时间点;@midnight 实际是 12:00 AM 到 2:59 AM 之间的某刻。
这里的
H很关键:它让 Jenkins 在区间内为每个任务挑一个固定但分散的时刻,避免所有任务卡在整点同时启动把 master 压垮。
轮询代码仓库:pollSCM
定期去仓库问代码有没有变化,有变化就触发:
pipeline {
agent any
triggers {
pollSCM('* * * * *') // 每分钟检查一次
}
}
由上游任务触发:upstream
当 B 任务依赖 A 任务的结果时,A 就是 B 的上游。Jenkins 2.22+ 的 triggers 支持 upstream,写在下游 Pipeline 里。
注意:需要先手动触发一次任务,让 Jenkins 加载过这段 Pipeline 后,triggers 才会生效。
triggers {
// 多个上游任务用逗号分隔;threshold 指上游结果达到什么状态才触发
upstream(upstreamProjects: 'job1, job2', threshold: hudson.model.Result.SUCCESS)
}
hudson.model.Result 枚举值:
ABORTED:任务被终止FAILURE:构建失败SUCCESS:构建成功UNSTABLE:有错误但未致失败NOT_BUILT:多阶段构建中前面阶段出问题导致后面没执行
由另一个 Pipeline 传参触发:build
build 步骤写在上游 Pipeline 里,用来调起另一条 Pipeline 并传参:
steps {
build(
job: "job-A",
parameters: [
booleanParam(name: 'iterate', value: true),
password(name: 'PASSWD', value: 'passwd'),
string(name: 'BranchName', value: 'main'),
text(name: 'DEPLOY_TEXT', value: 'a\nb\nc\n'),
string(name: 'choice', value: 'main'),
],
propagate: false
)
}
build 的常用参数:
job(必填):目标任务名。parameters(可选):传给目标 Pipeline 的参数列表。传参方式和定义参数类似,但choice类型没有对应的传参方法,用string代替。propagate(可选):布尔,为 true 时只有下游成功上游才算成功;为 false 时无论下游结果如何上游都忽略。默认 true。quietPeriod(可选):整型,触发下游后等待多少秒再执行;不设则由下游决定。wait(可选):布尔,是否等下游执行完,默认 true。
如果用了 folder 插件,job 参数要写相对路径(../sister-folder/downstream)或绝对路径(/top-level-folder/nested-folder/downstream)。