触发器触发流水线¶
为流水线配置触发器,周期性地自动触发流水线的执行。在编辑流水线时点击 编辑配置 ,即可配置构建触发器。
当前支持以下几种触发器类型:
- 代码源触发
- Webhook 触发
- 定时扫描仓库
- 定时触发
触发器类型 | 说明 |
---|---|
代码源触发器 | 选择工具链集成的代码仓库,并配置对应的触发事件,会根据对应的触发事件来触发当前流水线的运行。并且配置好后,应用工作台会自动将 Webhook 的地址配置到集成的代码仓库中。 |
定时扫描仓库 | 在指定的时间检查代码仓库是否有变更。例如填写 H/15 * * * * 表示每隔 15 分钟系统会自动检查代码仓库是否有新提交的变更,若有新提交的变更则会执行流水线。 |
定时触发器 | 在指定的时间触发流水线,开启定时触发器后,支持直接选择预设的规则,也可以选择自定义 CRON 表达式,输入自定义触发器规则。 |
触发器类型¶
代码源触发¶
选择工具链集成的代码仓库(目前仅支持集成的代码仓库),并配置对应的触发事件,会根据对应的触发事件来触发当前流水线的运行。并且配置好后,应用工作台会自动将 Webhook 的地址配置到集成的代码仓库中。
前提条件¶
- 集成 GitLab 代码仓库到当前工作空间
触发事件¶
分支变更
代码仓库中的分支与设置的分支匹配,并且当前分支有代码变更时,自动触发流水线。支持正则表达式。
PR/MR
启用后当代码仓库有新建、更新或合并PR/MR 时,自动触发流水线。
Tag
代码仓库创建 Tag 时,与设置的 Tag 规则匹配时,自动触发流水线,支持正则表达式。
Webhook 触发¶
启用 Webhook 触发后,您将获得 Webhook 地址,可以通过其他系统来触发流水线。
以 Gitlab 为例,介绍如何通过 Gitlab 仓库的 Webhook 触发流水线。
-
前往 Gitlab,选择并进入到某一个仓库详情。
-
依次点击 Settings -> Webhooks 。
-
在 URL 区域填写开启 Webhook 生成的地址,在 Trigger 区域根据实际情况勾选触发事件。
-
点击 Add webhook ,在 Project Hooks 区域会生成一条记录。
-
点击 test ,可以测试是否触发成功。
定时扫描仓库触发¶
在指定的时间检查代码仓库是否有变更。例如填写 H/15 * * * * 表示每隔 15 分钟系统会自动检查代码仓库是否有新提交的变更,若有新提交的变更则会执行流水线。
触发语法介绍参考触发器语器规则语法模块。
Note
- 如果是 基于代码仓库的 Jenkinsfile 创建的流水线,开启后,会自动在指定的时间检查代码仓库,
- 如果是 自定义创建 、 模板创建 创建的流水线,开启后,需要在流水线中定义 git clone 步骤,Jenkins 会检测填写的 git 仓库地址并检查。需要注意的是,流水线首次创建成功后并且开启了 定时扫描仓库 ,系统会自动触发一次流水线,如果此时流水线的 Jenkinsfile 是空的会导致运行失败,之后我们再次设置 gitclone 步骤的时候不去运行流水线,系统会默认认为流水线运行失败导致不会轮询仓库。所以我们建议在开启之前需要保证 Jenkinsfile 是由数据的。
定时触发¶
在指定的时间触发流水线,开启定时触发器后,支持直接选择预设的规则,也可以选择自定义 CRON 表达式,输入自定义触发器规则。
触发语法介绍参考触发器规则语法模块。
触发器规则语法¶
触发规则语法遵循 CRON 的语法(但有细微差别)。具体来说,每行由 5 个 Tab 或空格分隔的字段组成: MINUTE HOUR DOM MONTH DOW
字段 | 说明 | 取值范围 |
---|---|---|
MINUTE | 分钟 | 0 ~ 59 |
HOUR | 小时 | 0 ~ 23 |
DOM | 天 | 1 ~ 31 |
MONTH | 月 | 1 ~ 12 |
DOW | 星期 | 1 ~ 6 代表周一至周六,0、7 代表周日 |
要为一个字段指定多个值,可以按照优先顺序使用以下运算符:
运算符 | 说明 |
---|---|
* | 表示匹配取值范围内的所有值 |
M-N | 表示指定范围内的所有值 |
M-N/X 或 */X | 表示在指定范围或整个有效范围内每隔 X 触发一次 |
A,B,...,Z | 表示匹配多个值 |
为了使定期调度的任务在系统上产生均匀的负载,应尽可能使用符号 H(代表“哈希”)。 例如,对十几个日常工作使用 0 0 * * * 将导致午夜时出现较大的峰值,可能会导致资源紧张。 相比之下,使用 H H * * * 仍然会每天执行一次每个作业,但不是同时执行一次,这样能够更好地使用有限的资源。
H 可以与范围一起使用。例如 H H(0-7) * * * 表示 00:00 到 7:59 之间的某个时间。
由于不同的月份天数不同,所以当 DOM 中出现 /3 或 H/3 等短周期时,在大多数月份结束时不会触发。 例如, */3 将在每个月的第 1 天、第 4 天、……、第 31 天触发任务。如果下个月有 30 天,最后一次触发任务的时间为第 28 天。
另外,@yearly、@annually、@monthly、@weekly、@daily、@midnight 和 @hourly 作为方便的别名。 这些使用哈希进行自动匹配。例如,@hourly 与 H * * * * 相同,可以表示一小时内的任何时间。 @midnight 代表每天 0:00 ~ 2:59 之间的一段时间。
规则举例
规则 | 说明 |
---|---|
H/15 * * * * | 表示每隔 15 分钟触发一次,例如每小时的 07 分、22 分、37 分和 52 分 |
H(0-29)/10 * * * * | 表示在每个小时的前半小时中,每 10 分钟触发一次,例如每小时的 04 分、14 分和 24 分 |
45 9-16/2 * * 1-5 | 表示每个工作日从 9 点 45 分开始下午 15 点 45 分结束,每隔 2 小时,在第 45 分钟触发一次 |
H H(8-15)/2 * * 1-5 | 表示每个工作日从 8 点到 16 点这段时间内,每隔 2 小时之间的某刻触发一次,例如在 9:38、11:38、13:38、15:38 |
H H 1,15 1-11 | 表示每月 1 日和 15 日每天一次,除 12 月外 |