跳转至

触发器触发流水线

为流水线配置触发器,周期性地自动触发流水线的执行。在编辑流水线时点击 编辑配置 ,即可配置构建触发器。

trigger001

当前支持以下几种触发器类型:

  • 代码源触发
  • Webhook 触发
  • 定时扫描仓库
  • 定时触发
触发器类型 说明
代码源触发器 选择工具链集成的代码仓库,并配置对应的触发事件,会根据对应的触发事件来触发当前流水线的运行。并且配置好后,应用工作台会自动将 Webhook 的地址配置到集成的代码仓库中。
定时扫描仓库 在指定的时间检查代码仓库是否有变更。例如填写 H/15 * * * * 表示每隔 15 分钟系统会自动检查代码仓库是否有新提交的变更,若有新提交的变更则会执行流水线。
定时触发器 在指定的时间触发流水线,开启定时触发器后,支持直接选择预设的规则,也可以选择自定义 CRON 表达式,输入自定义触发器规则。

触发器类型

代码源触发

选择工具链集成的代码仓库(目前仅支持集成的代码仓库),并配置对应的触发事件,会根据对应的触发事件来触发当前流水线的运行。并且配置好后,应用工作台会自动将 Webhook 的地址配置到集成的代码仓库中。

前提条件

  • 集成 GitLab 代码仓库到当前工作空间

触发事件

分支变更

代码仓库中的分支与设置的分支匹配,并且当前分支有代码变更时,自动触发流水线。支持正则表达式。

PR/MR

启用后当代码仓库有新建、更新或合并PR/MR 时,自动触发流水线。

Tag

代码仓库创建 Tag 时,与设置的 Tag 规则匹配时,自动触发流水线,支持正则表达式。

Webhook 触发

启用 Webhook 触发后,您将获得 Webhook 地址,可以通过其他系统来触发流水线。

以 Gitlab 为例,介绍如何通过 Gitlab 仓库的 Webhook 触发流水线。

  1. 前往 Gitlab,选择并进入到某一个仓库详情。

  2. 依次点击 Settings -> Webhooks

  3. URL 区域填写开启 Webhook 生成的地址,在 Trigger 区域根据实际情况勾选触发事件。

    webhook

  4. 点击 Add webhook ,在 Project Hooks 区域会生成一条记录。

    webhook

  5. 点击 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 中出现 /3H/3 等短周期时,在大多数月份结束时不会触发。 例如, */3 将在每个月的第 1 天、第 4 天、……、第 31 天触发任务。如果下个月有 30 天,最后一次触发任务的时间为第 28 天。

另外,@yearly@annually@monthly@weekly@daily@midnight@hourly 作为方便的别名。 这些使用哈希进行自动匹配。例如,@hourlyH * * * * 相同,可以表示一小时内的任何时间。 @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 月外

评论