# 触发器触发流水线 为流水线配置触发器,周期性地自动触发流水线的执行。在编辑流水线时点击 __编辑配置__ ,即可配置构建触发器。 ![trigger001](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/amamba/images/trigger001.png) __当前支持以下几种触发器类型:__ - 代码源触发 - 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](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/amamba/images/webhook01.png) 4. 点击 __Add webhook__ ,在 __Project Hooks__ 区域会生成一条记录。 ![webhook](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/amamba/images/webhook02.png) 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__ 中出现 __/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 月外 |