
# 配置流水线执行条件表达式
在流水线阶段任务的执行条件中通过表达式引用流水线上下文，用以限制任务执行。表达式由[流水线上下文](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0005.html)、操作符、函数或常量组合而成，表达式以编程的方式访问流水线上下文，实现将流水线中运行的实例、变量、任务等信息在流水线之间互相传递。
1. [新建流水线](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0001.html)。
2. 新建阶段任务或编辑已有阶段任务。
3. 单击"任务配置"，在"执行条件"参数项选择"表达式"，即可配置流水线阶段任务执行条件的表达式。**如果是新建阶段任务，需添加插件后再单击"任务配置"。**
   
   图1执行条件表达式   
   ![](https://support.huaweicloud.com/usermanual-pipeline/zh-cn_image_0000002288806536.png "点击放大")
   示例：
   在执行条件中定义任务在指定代码源的运行分支为"master"时才运行，表达式代码语法如下：
   ```
   ${{ sources.my_repo.target_branch == 'master' }}
   ```
   
   
#### 相关参考
- **操作符**
  表达式中可以使用如下操作符：
  表1操作符 
  | **操作符** | **说明**                                                                                                                           |
  |:---|:---|
  | .       | 属性引用。如：${{ pipeline.trigger_type }}，表示获取流水线的触发类型。                                                                                |
  | !       | 非。如：${{ !startsWith(sources.my_repo.target_branch, 'release') }}，表示判断流水线代码源的分支是否不以release开头。                                     |
  | ==      | 等于。如：${{ pipeline.trigger_type == 'Manual' }}，表示判断流水线的触发方式是否为手动触发。                                                               |
  | !=      | 不等于。如：${{ pipeline.trigger_type != 'Manual' }}，表示判断流水线的触发方式是否不为手动触发。                                                             |
  | \&\&    | 且。如：${{ pipeline.trigger_type == 'Manual' \&\& sources.my_repo.target_branch == 'master' }}，表示判断流水线的触发方式为手动触发并且流水线代码源的分支为master。 |
  | \|\|    | 或。如：${{ pipeline.trigger_type == 'Manual' \|\| sources.my_repo.target_branch == 'master' }}，表示判断流水线的触发方式为手动触发或者流水线代码源的分支为master。 |
     
  
- **函数**
  表达式中可使用如下内置函数：
  表2内置函数 
  | **函数**     | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
  |:---|:---|
  | contains   | - 格式 contains(search, item)   - 含义 如果"search"包含"item"，则函数返回"true"。 - 如果"search"是一个数组，那么如果"item"是数组中的一个元素，则此函数返回"true"。  - 如果"search"是一个字符串，那么如果"item"是"search"的子字符串，则函数返回"true"。    - 示例 contains('abc', 'bc') ，函数将返回"true"。    |
  | startsWith | - 格式 startsWith(searchString, searchValue)   - 含义 如果"searchString "以"searchValue"开始，则函数返回"true "。   - 示例 startsWith('abc', 'ab')，函数将返回"true"。                                                                                                                                                                                                                                                                                                       |
  | endsWith   | - 格式 endsWith(searchString, searchValue)   - 含义 如果"searchString"以"searchValue"结束，则函数返回"true"。   - 示例 endsWith('abc', 'bc')，函数将返回"true"。                                                                                                                                                                                                                                                                                                                              |
  | format     | - 格式 format(string, replaceValue0, replaceValue1, ..., replaceValueN)   - 含义 使用replaceValueN的值替换原始字符串string中的值。   - 示例 format('Hello {0} {1}', 'a', 'b')返回Hello a b。                                                                                                                                                                                                                                                                                                               |
  | substring  | - 格式 substring(string, beginIndex, endIndex)   - 含义 截取原始字符串string中下标从beginIndex到endIndex-1的字符串。不写endIndex，则返回beginIndex到末尾的字符串。   - 示例 substring('202412091101', 0, 8)返回20241209。 substring('202412091101', 8)返回1101。                                                                                                                                                                                                            |
  | replace    | - 格式 replace(string, target, replacement)   - 含义 将原始字符串string中与target匹配的每个子字符串替换为replacement。   - 示例 replace('hello a', 'a', 'b')返回hello b。                                                                                                                                                                                                                                                                                                     |
  | completed  | - 格式 completed(job1, job2, ..., jobN)   - 含义 在依赖的任务运行成功(不填写参数)或指定的job运行成功（填写参数）时，返回true。completed()在依赖的任务均运行成功(COMPLETED)时，返回true。同"任务配置"中的"前置任务成功时执行"。   - 示例 completed('job1', 'job2')在job1和job2均运行成功时，返回true。                                                                                                                                                                                                                                                        |
  | always     | - 格式 always()   - 含义 在依赖的任务运行结束后，不管它们的状态如何，均执行当前任务。同"任务配置"中的"始终执行"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  | canceled   | - 格式 canceled()   - 含义 在依赖的任务运行被中止时，执行当前任务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
  | failed     | - 格式 failed(job1, job2, ..., jobN)   - 含义 在依赖的任务运行失败(不填写参数)或指定的job运行失败(填写参数)时，返回true。failed()在依赖的任务中任意一个运行失败(FAILED)时，返回true。同"任务配置"中的"前置任务失败时执行"。   - 示例 failed('job1', 'job2')在job1和job2中任意一个运行失败时，返回true。                                                                                                                                                                                                                                                         |
  | 对象筛选器      | 使用"\*"语法应用筛选器并选择集合中的匹配项。 示例：如下是流水线某次运行的jobs上下文 ``` { "check_job": { "status": "COMPLETED", "metrics": { "critical": "0", "major": "0" } }, "demo_job": { "status": "FAILED" } } ``` - 示例1："jobs.\*.status"，表示所有任务的状态，所以返回"\[ 'COMPLETED', 'FAILED' \]"。  - 示例2：结合**contains**函数一起使用，如：contains(jobs.\*.status, 'FAILED')，"jobs.\*.status"中包含"FAILED"，所以返回"true"。                                                                                                                                                                                                                                                         |
     
  
 
