更新时间:2024-07-08 GMT+08:00
分享

配置流水线执行条件

操作场景

执行条件指流水线阶段任务执行时需要满足的前提条件,通过配置执行条件,可以控制阶段任务是否执行。

操作步骤

  1. 在流水线“任务编排”页,添加或编辑流水线阶段任务。
  2. 在弹出的侧滑框中单击“任务配置”卡片。

    添加任务时,需先添加插件才能进行任务配置。

    表1 任务配置

    参数项

    说明

    ID

    任务的ID,同一条流水线上的任务ID不能重复。

    执行条件

    可根据需要配置如下四种执行条件。

    • 前置任务未选择仍执行:上一个任务状态执行成功或未选择,都继续执行当前任务。
    • 前置任务成功时执行:上一个任务执行成功才执行当前任务。
    • 前置任务失败时执行:上一个任务执行失败才执行当前任务。
    • 始终执行:始终执行当前任务,上一个任务状态是失败、成功、中止或忽略执行,都继续执行当前任务。
    • 表达式:表达式形式为“${{ }}”,由流水线上下文、操作符、函数或常量任意组合而成,当前置任务到达终态(成功、失败、中止或忽略执行),且表达式结果为“true”时,执行当前任务,否则不执行。

流水线执行条件表达式

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

  • 操作符
    表达式中可以使用如下操作符:
    表2 表达式操作符

    操作符

    说明

    .

    属性引用。

    !

    非。

    ==

    等于。

    !=

    不等于。

    &&

    且。

    ||

    或。

    示例:

    如需在执行条件中指定不管前置任务(任务ID为“job_1”)运行成功或失败,均执行当前任务,则表达式语法如下。

    ${{ jobs.job_1.status == 'COMPLETED' || jobs.job_1.status == 'FAILED' }}
  • 函数

    表达式中可使用如下内置函数:

    表3 表达式内置函数

    函数

    说明

    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上下文。

    则“jobs.*.status”返回“[ 'COMPLETED', 'FAILED' ]”。

    可结合contains函数一起使用,如:contains(jobs.*.status, 'FAILED'),函数将返回“true”。

    {
        "check_job": {
            "status": "COMPLETED",
            "metrics": {
                "critical": "0",
                "major": "0"
            }
        },
        "demo_job": {
            "status": "FAILED"
        }
    }

流水线上下文信息参考

流水线上下文存储了流水线运行的实例、变量、任务等信息,每个上下文都是一个包含各种属性的对象。流水线上下文主要包括以下四类:

表4 流水线上下文

上下文

类型

说明

pipeline

object

流水线运行相关的信息。

sources

object

流水线运行的源相关的信息。

env

object

流水线运行的自定义参数相关的信息。

jobs

object

流水线运行的已执行完成的任务相关的信息。

  • 流水线上下文引用形式
    ${{ <context>.<attribute_name> }}
  • 流水线上下文使用场景

    大部分上下文可在流水线任意任务和步骤中使用。

    • 在任务的执行条件中引用上下文,来指定某个任务的执行条件。
      示例:如下使用表示任务在指定代码源的运行分支为“master”时才运行。
      ${{ sources.my_repo.target_branch == 'master' }}
    • 在任务的输入框中引用上下文获取信息。

      示例1:如下使用表示获取流水线运行的所有信息。
      ${{ pipeline }}
      示例2:如下使用表示获取流水线运行的触发方式。
      ${{ pipeline.trigger_type }}
  • 流水线上下文属性介绍
    表5 流水线上下文属性

    上下文

    属性

    类型

    说明

    示例

    pipeline context

    pipeline

    object

    流水线运行相关的所有信息,此对象包含的属性包括:project_id、pipeline_id、run_number、timestamp、trigger_type和run_id。

    • 内容示例

      如下示例为一次手动运行的流水线包含的pipeline context信息。

      {
          "project_id": "6428c2e2b4b64affa14ec80896695c49",
          "pipeline_id": "f9981060660249a3856f46c2c402f244",
          "run_number": "168",
          "timestamp": "20231016000004",
          "trigger_type": "Manual",
          "run_id": "c2f507f93510459190b543e47f6c9bec"
      }
    • 使用示例

      如需在某个任务的输入中获取本次流水线运行的触发方式,可使用如下语法来获取。

      ${{ pipeline.trigger_type }}

    pipeline.project_id

    string

    当前流水线所属项目ID,同现有系统预定义参数PROJECT_ID。

    pipeline.pipeline_id

    string

    当前流水线ID,同现有系统预定义参数PIPELINE_ID。

    pipeline.run_number

    string

    流水线执行编号,同现有系统预定义参数PIPELINE_NUMBER。

    pipeline.timestamp

    string

    流水线执行时间戳,同现有系统预定义参数TIMESTAMP。如:20211222124301。

    pipeline.trigger_type

    string

    流水线触发类型,同现有系统预定义参数PIPELINE_TRIGGER_TYPE。

    pipeline.run_id

    string

    流水线执行ID,同现有系统预定义参数PIPELINE_RUN_ID。

    sources context

    sources

    object

    流水线运行的源相关的所有信息,此对象包含的属性包括:alias、repo_name、commit_id、commit_id_short、commit_message、repo_url、repo_type、repo_name、ssh_repo_url、tag、merge_id、source_branch和target_branch。

    • 内容示例

      如下示例为单代码源的流水线一次手动运行所包含的sources context信息,其中代码源别名为“my_repo”。

      {
          "my_repo": {
              "commit_id": "dedb73bb9abfdaab7d810f2616bae9d2b6632ecc",
              "commit_id_short": "dedb73bb",
              "commit_message": "maven0529 更新 pipeline0615.yml",
              "repo_url": "https://example.com/clsyz00001/maven0529.git",
              "repo_type": "codehub",
              "repo_name": "maven0529",
              "ssh_repo_url": "git@example.com:clsyz00001/maven0529.git",
              "target_branch": "master"
          }
      }
    • 使用示例

      如需在某个任务的输入中获取本次流水线运行的运行分支,可使用如下语法来获取。

      ${{ sources.my_repo.target_branch }}

    sources.<alias>

    object

    别名为alias对应的流水线源的所有信息,当流水线源定义别名时存在。

    sources.<repo_name>

    object

    代码仓名称为repo_name的流水线代码源的所有信息,当代码源未定义别名时存在,包含属性同alias。

    sources.<alias>.commit_id

    string

    执行时代码最后一次提交的ID,同现有系统预定义参数COMMIT_ID。

    sources.<alias>.commit_id_short

    string

    执行时代码最后一次提交的短ID,同现有系统预定义参数COMMIT_ID_SHORT。

    sources.<alias>.commit_message

    string

    执行时代码最后一次提交的message。

    sources.<alias>.repo_url

    string

    代码仓地址(HTTPS),同现有系统预定义参数REPO_URL。

    sources.<alias>.repo_type

    string

    代码仓类型。

    sources.<alias>.repo_name

    string

    代码仓名称。

    sources.<alias>.ssh_repo_url

    string

    代码仓地址(SSH)。

    sources.<alias>.tag

    string

    标签触发时的标签名称。

    sources.<alias>.merge_id

    string

    合并请求触发时的合并请求ID。

    sources.<alias>.source_branch

    string

    合并请求触发时的源分支名称。

    sources.<alias>.target_branch

    string

    MR时代表目标分支名称,否则代表运行分支名称。

    env context

    name

    string

    自定义参数名称。

    • 内容示例

      如下示例为流水线一次运行包含的env context信息,包含了两个自定义参数。

      {
          "var_1": "val1",
          "var_2": "val2"
      }
    • 使用示例

      如需要在某个任务的输入中获取本次流水线运行的自定义参数“var_1”的值,可使用如下语法来获取。

      ${{ env.var_1 }}

    value

    string

    自定义参数值。

    jobs context

    jobs

    object

    流水线运行的任务相关的信息,此对象包含的属性包括: job_id、status、outputs、output_name、metrics、metric_name。

    • 内容示例

      如下示例为流水线一次运行对应的jobs context信息,包含两个执行成功的任务,ID为“check_job”的任务的输出为两项指标,ID为“demo_job”的任务的输出为两项一般输出。

      {
          "check_job": {
              "status": "COMPLETED",
              "metrics": {
                  "critical": "0",
                  "major": "0"
              }
          },
          "demo_job": {
              "status": "COMPLETED",
              "outputs": {
                  "output1": "val1",
                  "output2": "val2"
              }
          }
      }
    • 使用示例

      如需要在后续任务的输入中获取本次运行的“demo_job”的输出“output1”的值,可使用如下语法来获取。

      ${{ jobs.demo_job.outputs.output1 }}

    jobs.<job_id>

    object

    ID为job_id的任务包含的所有信息。

    jobs.<job_id>.status

    string

    任务的运行结果,取值结果为:INIT、QUEUED、RUNNING、CANCELED、COMPLETED、FAILED、PAUSED、IGNORED或UNSELECTED。

    jobs.<job_id>.outputs

    object

    任务的运行一般输出。

    jobs.<job_id>.outputs.<output_name>

    string

    任务的运行一般输出中output_name对应的值。

    jobs.<job_id>.metrics

    object

    任务的运行指标输出。

    jobs.<job_id>.metrics.<metric_name>

    string

    任务的运行指标输出中metric_name对应的值。

分享:

    相关文档

    相关产品