
# 配置流水线触发设置
#### 什么是流水线触发设置
流水线支持配置事件触发、定时任务、Webhook触发、并发策略和抢占策略五种触发设置。通过事件触发和定时任务，实现自动化执行；通过Webhook触发，用户可以通过任意第三方系统触发流水线执行；通过并发策略，可以更细粒度地为用户分配并发资源；通过抢占策略，用户可以通过新触发的运行实例强行停止当前流水线中相同事件触发的其他所有运行实例。
#### 约束与限制
- 配置流水线事件触发时。
  - 先匹配分支，再匹配路径，都匹配成功，则触发流水线。
  
  - 路径排除优先于路径包含，即先匹配排除的路径，如果变更文件没有全部在排除范围内，则继续匹配包含的路径。若未配置包含路径，则匹配成功，触发流水线；若配置了包含路径，并且变更文件在路径排除范围外有任意一个在包含范围内，则匹配成功，触发流水线。
  
  - Tag排除优先于Tag包含，即Tag同时在包含和排除中时，则匹配失败，不触发流水线。
  
  - 路径匹配范围：单次提交的前300个变更文件，变更文件数超过300建议拆分。
   
- 配置流水线定时执行时，定时任务最多可以设置10个。
 
#### 前提条件
- 已[开通并授权使用CodeArts Pipeline](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0033.html)。

- 当用户角色为"项目管理员"或者"流水线创建者"，可以配置流水线触发设置，权限配置请参考[授权流水线服务](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0038.html#pipeline_01_0038__section182321614205915)。
 
#### 配置流水线事件触发
事件触发包括代码提交事件、合并请求事件、创建Tag。码云代码仓还支持Pull Request、新建issue、评论issue等其他事件。
1. [访问CodeArts Pipeline首页](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0014.html)。
2. 在流水线列表页搜索目标流水线，单击操作列![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000001992692701.png)，选择"编辑"。
3. 进入流水线"任务编排"页面，切换至"触发设置"页面，在"事件触发"勾选触发事件进行配置。 
   - 代码提交事件（代码托管/码云） 监听代码提交事件，可以组合分支和具体路径的包含/排除范围，当在关联的代码仓库中有代码提交且所在的分支和变更文件的路径满足包含/排除策略，会自动触发关联流水线执行。
     - 分支过滤：可以通过设置包含或排除分支，来监听触发事件所在的目标分支。
     
     - 路径过滤：可以通过设置包含或排除路径，来监听触发事件所在的变更文件路径。
     
     
     图1配置代码提交事件   
     ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002530694512.png "点击放大") 
   
   - 合并请求事件（代码托管/码云） 监听合并请求事件，可以组合分支和具体路径的包含/排除范围，对新建、合并、更新、重新打开和仅代码更新触发事件设置触发策略，当在关联的代码仓库中触发合并请求事件且分支满足包含/排除策略，会自动触发关联流水线执行。
     事件说明：
     - 新建：合并请求创建时触发。
     
     - 合并：合并请求合入时触发，该事件会同时触发代码提交事件。
     
     - 重新打开：合并请求重新打开时触发。
     
     - 更新：合并请求内容更新、设置更新或者源代码更新时触发，打开"仅代码更新触发"，则仅源代码更新时触发。
     
     - 仅代码更新触发：仅源代码更新时触发。
     
     
     分支说明：
     - 分支过滤：可以通过设置包含或排除分支，来监听触发事件所在的目标分支。
     
     - 路径过滤：可以通过设置包含或排除路径，来监听触发事件所在的变更文件路径。
     
     
     图2配置合并请求事件   
     ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002561698097.png "点击放大")
     - 评论Pull Request：评论Pull Request时触发流水线执行。
      
   
   - 创建Tag（代码托管） 监听创建Tag事件，可以设置Tag包含/排除范围，当在关联的代码仓库创建Tag且满足Tag包含/排除策略，会自动触发关联流水线执行。
     图3配置创建Tag   
     ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002561698123.png "点击放大") 
   
   - 其他事件（码云）
     - 新建issue：新建issue时触发流水线运行。
     
     - 评论issue：评论issue时触发流水线运行。
     
     
     **除了上述事件外，码云代码仓还支持开启事件触发成功后自动评论。**
     
   
   
   
   
4. 配置完成后，单击"保存"，弹出"保存信息成功"提示，完成流水线的保存。
 
#### 配置流水线定时执行
配置流水线在指定的时间自动执行。
1. [访问CodeArts Pipeline首页](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0014.html)。
2. 在流水线列表页搜索目标流水线，单击操作列![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000001955980288.png)，选择"编辑"。
3. 进入流水线"任务编排"页面，切换至"触发设置"页面。
4. 单击"定时任务"区域的"创建定时任务"，增加一个定时任务，打开"启用定时执行"开关（默认开启），配置如下信息： 
   图4配置定时任务   
   ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002530701068.png "点击放大")
   表1定时任务 
   | **参数项** | **说明**                                                                                                                                                  |
   |:---|:---|
   | 启用定时执行  | 选择是否开启定时执行。                                                                                                                                             |
   | 配置方式    | 选择"表单配置"或"cron表达式"。"cron表达式"请参考[cron表达式]填写。                                                                          |
   | 执行日     | 选择定时执行的执行日期。                                                                                                                                            |
   | 时间段     | 选择定时执行的执行时间段和时区。                                                                                                                                        |
   | 间隔时间    | 设置定时执行的间隔时间，即每间隔多长时间触发一次。                                                                                                                               |
   | 执行方案    | 选择定时执行的执行方案，也可新建执行方案，新建执行方案可参考[配置执行方案](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0073.html#pipeline_01_0073__section31108464415)。 |
      
   ![](https://support.huaweicloud.com/usermanual-pipeline/public_sys-resources/note_3.0-zh-cn.png)
   单击右上角![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002037416672.png)，可删除定时任务；单击右上角![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002073456197.png)，可复制定时任务。
   - cron表达式由6个部分组成，每个部分使用空格隔开。表达式中的六个部分从左到右代表的含义如下：秒 分 时 日 月 周。
     表2Cron参数说明 
     | 名称 | 是否必填 | 可选数值                                                                                                                                                                                 | 可选特殊符号         |
     |:---|:---|:---|:---|
     | 秒  | 是    | 数字0-59。                                                                                                                                                                              | , - \* /       |
     | 分  | 是    | 数字0-59。                                                                                                                                                                              | , - \* /       |
     | 时  | 是    | 数字0-23。                                                                                                                                                                              | , - \* /       |
     | 日  | 是    | 每月中的一天，数字1-31。注意2月没有30日和31日，4月、6月、9月、11月没有31日。                                                                                                                                       | , - \* ? / L W |
     | 月  | 是    | 数字1-12，或字符串。数字与字符串的对应关系请参见[表4]。 假如您想在月参数中填写1月，数字"1"或字符串"JAN"都符合QuartZ Cron表达式的约定。                          | , - \* /       |
     | 周  | 是    | 数字1-7，或字符串。数字与字符串的对应关系请参见[表5]，QuartZ Cron表达式约定周六为每周的最后一天。 假如您想在周参数中填写周一，数字"2"或字符串"MON"都符合QuartZ Cron表达式的约定。 | , - \* ? / L # |
        
     表3特殊符号含义 
     | 特殊符号 | 说明                                                                                                                                                                         |
     |:---|:---|
     | -    | 表示范围。例如在"分"使用"5-20"，表示从5分到20分钟每分钟触发一次。                                                                                                                                     |
     | ,    | 表示列表值。例如：在"分"使用"5,20"，则表示在每小时的第5分和20分触发一次定时任务。                                                                                                                             |
     | \*   | 表示匹配该域的任意值。假如在"分"使用"\*"，即表示每分钟都会触发事件。                                                                                                                                      |
     | /    | 表示起始时间开始触发，然后每隔固定时间触发一次。例如在"分"使用"5/20"，则表示每小时的第5、25、45分钟分别触发定时任务。                                                                                                          |
     | ?    | 只能用在"日（每月中的一天）"和"周"两个参数中。它也匹配参数的任意值，但实际不会。因为"日（每月中的一天）"和"周"会相互影响。例如想在每月的20日触发调度，不管20日是星期几，则只能使用如下写法： 13 13 15 20 \* ?，其中最后一位只能用"?"，而不能使用"\*"，如果使用"\*"表示不管星期几都会触发，实际上并不是这样。 |
     | L    | 表示最后，只能出现在"日（每月中的一天）"和"周"参数中。如果在"周"域使用"5L"表示在最后的一个星期四触发。                                                                                                                   |
     | W    | 表示有效工作日(周一到周五)，只能出现在"日（每月中的一天）"参数中，系统将在离指定日期的最近的有效工作日触发事件。例如：在 "日（每月中的一天）"使用"5W"，如果5日是星期六，则将在最近的工作日：星期五，即4日触发。如果5日是星期天，则在6日(周一)触发；如果5日在星期一到星期五中的一天，则就在5日触发。W的最近寻找不会跨过月份 。  |
     | #    | 用于确定每个月第几个星期几，只能出现在"日（每月中的一天）"域。例如在4#2，表示某月的第二个星期三。                                                                                                                        |
     | LW   | 这两个字符可以连用，表示在某个月最后一个工作日，即最后一个星期五。                                                                                                                                          |
        
      表4月参数的数字与字符串对应关系 
     | 数字 | 字符串 |
     |:---|:---|
     | 1  | JAN |
     | 2  | FEB |
     | 3  | MAR |
     | 4  | APR |
     | 5  | MAY |
     | 6  | JUN |
     | 7  | JUL |
     | 8  | AUG |
     | 9  | SEP |
     | 10 | OCT |
     | 11 | NOV |
     | 12 | DEC |
        
      表5每周数字与字符串对应表 
     | 数字 | 字符串 | 含义 |
     |:---|:---|:---|
     | 1  | SUN | 周日 |
     | 2  | MON | 周一 |
     | 3  | TUE | 周二 |
     | 4  | WED | 周三 |
     | 5  | THU | 周四 |
     | 6  | FRI | 周五 |
     | 7  | SAT | 周六 |
        
     ![](https://support.huaweicloud.com/usermanual-pipeline/public_sys-resources/note_3.0-zh-cn.png)
     最多可以设置10个定时任务。
     **配置示例：**
     ```
     0 0 12 * * ?                //每天中午12点执行一次 。
     0 * 14 * * ?                //在每天下午2点到下午2:59期间的每1分钟执行一次 。
     0 0/30 9-19 * * ?           //上午9点到下午19:59期间每半小时执行一次。
     0 0 12 ? * WED              //每个星期三中午12点执行一次。
     0 0/30 9-19 ? * MON-FRI     //周一到周五，早上9点至下午19:59点期间，每半小时执行一次。
     0 15 10 ? * MON-FRI         //周一到周五每天上午10:15执行一次。
     0 0 2 1 * ?                 //在每月的1日的凌晨2点执行一次。
     0 15 10 ? * 6#3             //每月的第三个星期五上午10:15执行一次。
     0 15 10 ? * 6L              //每月的最后一个星期五上午10:15执行一次。
     ```
     
   
   
   
   
5. 配置完成后，单击"保存"，弹出"保存信息成功"提示，完成流水线的保存。
#### Webhook触发
通过Webhook触发，用户可以通过任意第三方系统触发流水线执行。
1. [访问CodeArts Pipeline首页](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0014.html)。
2. 在流水线列表页搜索目标流水线，单击操作列![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002058579226.png)，选择"编辑"。
3. 进入流水线"任务编排"页面，切换至"触发设置"页面。
4. 打开"Webhook"开关（默认关闭），参考[表6]配置相关参数。
   
   图5配置Webhook触发   
   ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002399141249.png "点击放大")
    表6配置Webhook触发 
   | **参数项**    | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   |:---|:---|
   | Webhook触发源 | 将该地址复制到第三方系统触发器，使用Post方法调用，即可运行流水线。                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | IAM认证      | - 启用IAM认证，需要将用户IAM Token加入接口请求头，调用示例如下： ``` curl --header "Content-Type: application/json" --header 'x-auth-token: XXXX（IAM Token）' --request POST --data "{}" Webhook触发源 ```   - 不启用IAM认证，调用示例如下： ``` curl --header "Content-Type: application/json" --request POST --data "{}" Webhook触发源 ```    |
      
   
   
5. 配置完成后，单击"保存"，弹出"保存信息成功"提示，完成流水线的保存。
 
#### 配置流水线并发策略
默认单条流水线最大执行并发数为5，超过并发数后新的触发忽略不执行。可以通过并发策略为单条流水线配置同时处于运行中状态的流水线最大实例个数，即并发数，更细粒度地为用户分配并发资源。
1. [访问CodeArts Pipeline首页](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0014.html)。
2. 在流水线列表页搜索目标流水线，单击操作列![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000001992868209.png)，选择"编辑"。
3. 进入流水线"任务编排"页面，切换至"触发设置"页面。
4. 打开"并发策略"开关（默认关闭），设置并发数和超过并发后执行策略。 
   图6配置并发策略   
   ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002568968974.png "点击放大")
   表7配置并发策略 
   | **参数项**   | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|
   | 并发个数      | 单条流水线最大执行并发数，受套餐和购买并发数限制，详情请参考[流水线规格特性差异](https://support.huaweicloud.com/price-devcloud/codearts_29_0006.html#section3)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 超过并发后执行策略 | 超过并发数后可选择如下两种处理方式： - 排队等待：超过并发数后新的触发排队等待执行，可进入流水线详情页查看排队记录。 - 单条流水线最多支持100条排队记录。  - 单条排队记录排队时长超过72小时后会被放弃执行。  - 排队记录支持手动取消排队，即放弃执行。  - 排队记录执行时，配置信息以入队时为准。    - 忽略不执行：超过并发数后新的触发忽略不执行。   |
      
   
   
5. 配置完成后，单击"保存"，弹出"保存信息成功"提示，完成流水线的保存
 
#### 配置流水线抢占策略
同一条流水线存在多个运行实例时，新触发的运行实例会强行停止当前流水线中相同事件触发的其他所有运行实例。
1. [访问CodeArts Pipeline首页](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0014.html)。
2. 在流水线列表页搜索目标流水线，单击操作列![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002209600160.png)，选择"编辑"。
3. 进入流水线"任务编排"页面，切换至"触发设置"页面。
4. 打开"抢占策略"开关，选择抢占事件。 
   图7配置抢占策略   
   ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002365741780.png "点击放大")
   - 执行流水线时，查看参数详情，若系统预定义参数下没有"MERGE_ID"参数，则此条流水线执行实例不支持抢占策略功能。
   
   - 当前仅支持"MR ID"抢占事件，即抢占由同一个MR触发的流水线运行实例。
   
   - 抢占事件触发后，将会停止当前流水线中满足抢占条件的所有运行中的流水线实例。
   
   - 若当前流水线超并发，且不存在满足抢占条件的运行实例，则此次执行请求会按照并发策略来忽略或排队。
   
   
   
   
5. 配置完成后，单击"保存"，弹出"保存信息成功"提示，完成流水线的保存。
 
