流水线任务 jobs

流水线任务jobs:流水线任务 job 可以为多个步骤 steps 的组合(多个步骤共享工作空间,共同完成指定任务), 或一个组件 component 的调用(调用组件执行指定任务,组件任务支持重试、跳过等更多操作)。

示例

  • 以下为一个任务添加多个步骤的配置示例:

    stages:
      build_stage:
        name: 构建阶段
        jobs:
          build_job: 
            name: 构建任务
            runsOn: public/cn-beijing
            steps:                                # steps 配置任务步骤
              build_step:                        
                step: JavaBuild                   
                name: java构建                     
                with:                            
                  ......
              upload_step:
                step: ArtifactUpload
                name: 构建物上传
                with:
                  ......
    
  • 以下为一个任务实现一个组件的配置示例:

    stages:
      build_stage:
        name: 构建阶段
        jobs:
          deploy_job:
            name: 主机组部署任务
            component: VMDeploy                # component 配置任务组件
            with:                              
              artifact: $[stages.build_stage.build_job.upload_step.artifacts.default]
              ......

详细说明

stages.<stage_id>.jobs

流水线任务,流水线任务可以为多个步骤 steps 的组合, 或一个组件 component 的实现。

stages.<stage_id>.jobs.<job_id>

必填。流水线任务 id,唯一标识流水线任务。job_id 只能包含字母、数字和 _ ,且必须以字母开头。长度限制 30 个字符。

stages.<stage_id>.jobs.<job_id>.name

如不填写,则使用job_id的值。长度限制 30 个字符。流水线任务的展示名称。

stages.<stage_id>.jobs.<job_id>.runsOn

非必填,默认使用云效北京构建集群。 流水线任务运行的集群环境,可以使用云效提供的公共集群环境,也可以使用私有构建集群。支持 默认环境指定容器环境默认VM环境

默认环境:在构建 K8s 集群或主机上启动容器,在容器环境进行构建。语法示例如下:

jobs:
  my_job:
    name: 我的任务
    runsOn: private/<私有构建集群ID>  // 指定私有构建集群、默认环境;不填时,默认使用云效北京构建集群

说明:默认环境已处于 Deprecated 状态,2025.4.1号之后创建的组织已不支持默认环境,请使用下述指定容器环境。

指定容器环境:在构建机器上启动指定容器,在单容器环境进行构建。语法示例如下:

jobs:
  my_job:
    name: 我的任务
    runsOn:
      group: [public/cn-beijing|public/cn-hongkong] // 指定容器环境目前仅支持云效公共构建集群
      container: build-steps-public-registry.cn-beijing.cr.aliyuncs.com/build-steps/alinux3:latest // 公网可直接访问的 public 镜像地址,云效系统官方镜像参考:https://atomgit.com/flow-steps/system_images/blob/main/README.md 

构建集群

yaml 标识

说明

云效北京构建集群

group: public/cn-beijing

云效提供的北京公共 K8s 集群(未指定 runsOn 时的默认值)

云效杭州构建集群

group: public/cn-hangzhou

云效提供杭州公共 K8s 集群

云效中国香港构建集群

group: public/cn-hongkong

云效提供的中国香港公共 K8s 集群

私有构建集群

group: private/<私有构建集群ID>

通过私有构建集群添加的企业私有主机集群

默认VM环境:直接在构建集群的宿主机或虚拟机上执行步骤。示例如下:

jobs:
  my_job:
    name: 我的任务
      runsOn:
        group: private/<私有构建集群ID>   // 仅支持私有构建集群,指定私有构建集群
        labels: windows, amd64          // 指定操作系统、架构调度;不填时,则随机调度到集群中的某台机器
        vm: true                        // 指定 VM 构建环境;不填时,则使用默认环境

目前私有构建集群支持接入 Linux、Windows、macOS 机器,各操作系统支持架构和构建环境如下:

操作系统

架构

labels

说明

Linux

amd64

linux,amd64

支持 默认环境默认VM环境

Linux

arm64

linux,arm64

仅支持 默认VM环境,需要指定 vm: true

Windows

amd64

windows,amd64

仅支持 默认VM环境,需要指定 vm: true

Windows

arm64

windows,arm64

仅支持 默认VM环境,需要指定 vm: true

macOS

amd64

darwin,amd64

仅支持 默认VM环境,需要指定 vm: true

macOS

arm64

darwin,arm64

仅支持 默认VM环境,需要指定 vm: true

stages.<stage_id>.jobs.<job_id>.runsOn.instanceType

非必填,构建环境规格。云效会根据任务中配置的步骤自动分配 DEFAULT 默认规格,默认规格详见帮助文档:构建集群 。如有需要,您也可以指定构建环境规格,规格可选:SMALL_1C2G、MEDIUM_2C4G、LARGE_4C8G、XLARGE_8C16G、XXLARGE_16C32G。

如:

jobs:
  my_job:
    name: 我的任务
    runsOn:
      group: public/cn-beijing
      container: build-steps-public-registry.cn-beijing.cr.aliyuncs.com/build-steps/alinux3:latest
      instanceType: LARGE_4C8G    # 指定构建环境规格

stages.<stage_id>.jobs.<job_id>.timeoutMinutes

非必填,默认任务运行超时时间为 240 分钟,支持设置范围 1~1440 分钟

如:

jobs:
  my_job:
    name: 我的任务
    runsOn:
      group: public/cn-beijing
      container: build-steps-public-registry.cn-beijing.cr.aliyuncs.com/build-steps/alinux3:latest
    timeoutMinutes: 60		# 任务开始运行后,60分钟超时结束

stages.<stage_id>.jobs.<job_id>.debugPolicy 和 stages.<stage_id>.jobs.<job_id>.debugRetentionMinutes

非必填,填写该值,则可以在任务结束之后保留任务执行环境,并登录到环境中进行调试。

只能和”指定容器环境“一起使用。

这两个值需要一起填写,或者都不填写。

debugPolicy 的可选值:

  1. onFailure:仅任务运行失败时才保留运行环境,运行成功或仅红线卡点不通过则不会保留环境

  2. always:无论任务是否成功都保留构建环境

debugRetentionMinutes 是1-240之间的整数,表示保留的时长

如:

jobs:
  my_job:
    name: 我的任务
    runsOn:
      group: public/cn-beijing
      container: build-steps-public-registry.cn-beijing.cr.aliyuncs.com/build-steps/alinux3:latest
    debugPolicy: always
    debugRetentionMinutes: 5

stages.<stage_id>.jobs.<job_id>.needs

非必填,默认一个阶段内的所有任务并行执行。若任务间有依赖关系,可通过needs描述阶段内的任务依赖关系。注意:

  • needs支持跨阶段的任务之间相互依赖。

  • 请确保依赖后的任务之间,有明确的先后关系。切勿出现循环依赖情况,如: A 依赖 B,B 依赖 C,C 依赖 A。

填写依赖任务的 <job_id>,如:

jobs:
  test_job:
    name: 测试任务
  build_job:
    name: 构建任务
    needs: test_job

stages.<stage_id>.jobs.<job_id>.driven

非必填,默认为 auto 自动执行。通过driven设置任务的触发方式,目前支持两种方式:

  • auto:自动执行

  • manual:手动确认执行

如:

jobs:
  my_job:
    name: 我的任务
    runsOn: public/cn-beijing
    driven: manual		#手动确认执行任务

stages.<stage_id>.jobs.<job_id>.condition

非必填,默认只有前序依赖任务全部成功后才执行本任务。通过condition判断本任务是否满足条件,若满足条件执行本任务。通过填写函数表达式如:

jobs:
  my_job:
    name: 我的任务
    runsOn: public/cn-beijing
    condition: |
      "${CI_COMMIT_REF_NAME}" == "master"		# 运行分支为 master 时执行该任务

支持关系操作符、逻辑操作符:

操作符

说明

示例

==

等于

condition: "${CI_COMMIT_REF_NAME}" == "master"

!=

不等于

condition: "${CI_COMMIT_REF_NAME}" == "master"

&&

condition: "${CI_COMMIT_REF_NAME}" == "master" && succeed()

||

condition: "${CI_COMMIT_REF_NAME}" == "master" || "${CI_COMMIT_REF_NAME}" == "develop"

提供一组内置函数,可用于表达式:

函数

说明

示例

startsWith(searchString, searchValue)

如果 searchString 以 searchValue 开头,将返回 true

condition: startsWith('Hello world','He')

endsWith(searchString, searchValue)

如果 searchString 以 searchValue 结尾,将返回 true

condition: endsWith('Hello world','ld')

contains(search, item)

输入 search 是一个数组,item 是数组中的一个元素,此函数将返回 true

condition: contains('["aa", "bb", "cc"]', 'aa')

weekDay()

此函数将返回一周中的某一天(Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday)

condition: weekDay()=="Thursday"

timeIn(startTime, endTime)

此函数判断当前时间是否在 startTime 和 endTime 之间

condition: timeIn("20:00:00", "22:00:00")

说明:函数参数可以填写存在的变量,例如设置了流水线变量 TEST_VAR=["aa", "bb", "cc"],可以在函数中用${}引用该变量:

jobs:
  job_1:
    name: 1
    condition: contains('${TEST_VAR}', 'aa')

可以通过任务状态函数,获取前序依赖任务的执行状态,函数入参为前序依赖任务的 <job_id>。

函数

说明

示例

always()

默认返回 true

condition: always()

succeed()

前序任务执行成功返回 true

condition: succeed('job_id_1','job_id_2')

failed()

前序任务执行失败返回 true

condition: failed('job_id_1','job_id_2')

注意:任务状态函数,若入参不填则为前序所有任务。如 succeed() 要求前序依赖任务全部成功才返回 true。 任务状态函数,入参必须为前序任务的 <job_id>。若填写了无依赖关系的 <job_id>,则无法正常执行。示例:

jobs:
  job_1:
    name: 任务1
  job_2:
    name: 任务2
  job_3:
    name: 任务3
    needs: 
      - job_1
      - job_2
    condition: succeed(job_1) || succeed(job_2) # job1 执行成功或 job2 执行成功,才执行job3

stages.<stage_id>.jobs.<job_id>.sourceOption

非必填,默认下载流水线中配置的所有流水线源文件。当流水线配置多个代码源时,可以选择任务节点是否下载源文件,或者下载指定源文件,通过填写<source_id>指定您要下载的源文件。

使用场景

说明

示例

下载所有源文件

不填写 sourceOption

不填写

不下载源文件

填写 sourceOption,内容为空

sourceOption: []

下载指定源文件

填写 sourceOption及<source_id>

sourceOption: [repo_1,repo_2]

stages.<stage_id>.jobs.<job_id>.steps

流水线任务可为多个步骤 steps 的组合,多个步骤共享工作空间,共同完成指定任务。

详细请查看流水线步骤 steps

stages.<stage_id>.jobs.<job_id>.component

流水线任务可调用一个组件 component 执行指定任务,组件任务支持重试、跳过等更多操作。

详细请查看流水线组件 component

stages.<stage_id>.jobs.<job_id>.with

当流水线任务为一个组件 component 调用时,通过with填写组件所需的执行参数。示例:

jobs:
  deploy_job:
  name: 主机组部署任务
  runsOn: public/cn-beijing
  component: VMDeploy             # 指定组件
  with:                           # 填写组件的参数
    artifact: $[stages.build_stage.build_job.upload_step.artifacts.default]
    machineGroup: <YOUR-MACHINE-GROUP-ID>
    ......

详细请查看流水线组件 component

stages.<stage_id>.jobs.<job_id>.plugins

  • 非必填。流水线任务消息通知可以通过配置 plugins 实现钉钉、邮件、企业微信、飞书、Webhook等渠道的消息通知。

  • 详细请查看流水线插件 plugins