文档首页/ 流水线 CodeArts Pipeline/ 用户指南/ 参考/ 流水线上下文/ 应用示例1:流水线执行条件表达式
更新时间:2024-11-05 GMT+08:00
分享

应用示例1:流水线执行条件表达式

在流水线阶段任务的执行条件中通过表达式引用上下文,用以限制任务执行。表达式由流水线上下文、操作符、函数或常量组合而成,表达式以编程的方式访问流水线上下文,实现将流水线中运行的实例、变量、任务等信息在流水线之间互相传递。

图1 执行条件表达式

示例:

在执行条件中定义任务在指定代码源的运行分支为“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”。

    对象筛选器

    使用“*”语法应用筛选器并选择集合中的匹配项。

    示例:如下是流水线某次运行的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”。

相关文档