流水线任务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
非必填,默认使用云效北京构建集群。 流水线任务运行的集群环境,可以使用云效提供的公共集群环境,也可以使用私有构建集群。
集群环境 | YAML 标识 | 备注 |
云效北京构建集群 | public/cn-beijing | 云效提供北京公共集群,若不指明集群环境,默认使用 |
云效中国香港构建集群 | public/cn-hongkong | 云效提供中国香港公共集群 |
私有构建集群 | private/私有构建集群ID | 通过私有构建集群添加 |
如:
jobs:
my_job:
name: 我的任务
runsOn: public/cn-beijing
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”。