
# 流水线任务jobs
一条流水线由定义在jobs中的多个任务组成。
#### jobs.\<job_id\>
使用jobs.\<job_id\>定义任务的唯一标识，流水线内不能重复，该标识只能由大小写字母、数字、"-"、"_"组成，最长32位。
```
jobs:
  job1:
    name: first job
  job2:
    name: second job
```
如上定义表示两个唯一标识分别为job1和job2的任务。
#### jobs.\<job_id\>.name
使用jobs.\<job_id\>.name定义任务的名称，在图形化界面中会展示该名称。
```
jobs:
  job1:
    name: first job
  job2:
    name: second job
```
如上定义表示job1和job2任务的名称分别为first job和second job。
#### jobs.\<job_id\>.needs
使用jobs.\<job_id\>.needs可定义任务在指定的任务结束后才开始运行。
```
jobs:
  job1:
    name: first job
  job2:
    needs: [ job1 ]
    name: second job
```
如上定义表示job2会在job1运行成功后开始执行。
#### jobs.\<job_id\>.if
使用jobs.\<job_id\>.if可定义任务的运行条件，表达式编写请参考[流水线执行条件表达式](https://support.huaweicloud.com/usermanual-pipeline/pipeline_01_0006.html)。
```
jobs:
  job1:
    name: first job
  job2:
    needs: [ job1 ]
    if: ${{ always() }}
    name: second job
```
如上定义表示job2会在job1运行结束后开始执行，不论job1的最终状态如何。
#### jobs.\<job_id\>.steps
每个任务由定义在steps中的多个步骤组成，每个步骤可运行一个指定的插件。
#### jobs.\<job_id\>.steps\<\*\>.name
使用jobs.\<job_id\>.steps\<\*\>.name定义步骤的名称，在图形化界面中会展示该名称。
#### jobs.\<job_id\>.steps\<\*\>.uses
使用jobs.\<job_id\>.steps\<\*\>.uses可指定步骤运行的插件。
```
jobs:
  demo_job:
    name: simple demo job
    steps:
      - name: simple custom step
        uses: custom_plugin@1.0.0
```
如上定义表示一个名称为custom_plugin，版本为1.0.0的插件。
#### 流水线官方插件YAML语法
- **Build构建**
  调用编译构建能力进行构建。
  ```
  uses: CodeArtsBuild
  with:
    jobId: 878b4d13cb284d9e8f33f988a902f57c
    artifactIdentifier: my_pkg
    customParam: value
  ```
  - jobId：编译构建任务id。获取方法：在构建任务详情页，复制浏览器URL末尾的32位数字、字母组合的字符串，即为构建任务ID。
  
  - artifactIdentifier：构建产物标识。
  
  - customParam：在构建任务定义的支持运行时设置的参数值，可能有0到多个。
   
- **TestPlan接口测试**
  调用CodeArts TestPlan能力进行测试。
  ```
  uses: CodeArtsTestPlan
  with:
    jobId: vb180000vnrgoeib
    environmentModel: 1
    environmentId: 7c2eff2377584811b7981674900158e8
  ```
  - jobId：接口测试任务的id。
  
  - environmentModel：参数来源（0表示使用全新执行参数，1表示使用选中环境的全局参数）。
  
  - environmentId：environmentModel为1时的环境id。
   
- **Deploy部署**
  调用CodeArts Deploy能力进行部署。
  ```
  uses: CodeArtsDeploy
  with:
    jobId: 9c5a5cda6ffa4ab583380f5a014b2b31
    customParam: value
  ```
  - jobId：部署任务的id。
  
  - customParam：在部署任务处定义的支持运行时设置的参数值，可能有0到多个。
   
- **Check代码检查**
  调用CodeArts Check能力进行代码检查。
  ```
  uses: CodeArtsCheck
  with:
    jobId: 43885d46e13d4bf583d3a648e9b39d1e
    checkMode: full|push_inc_full||push_multi_inc_full
  ```
  - jobId：代码检查任务的id。
  
  - checkMode：检查模式。
    - full：表示对本次commit所在分支的全量代码进行检查。
    
    - push_inc_full：表示对本次commit的变更文件内容进行检查。
    
    - push_multi_inc_full：表示对上一次检查成功的commit到本次commit之间的变更文件内容进行检查。
     
   
- **创建仓库Tag**
  为代码仓创建Tag并推送。
  ```
  uses: CreateTag
  with:
    tagName: v1
  ```
  tagName为Tag名称。
  
- **子流水线**
  配置并调用项目下其他流水线任务。
  ```
  uses: SubPipeline
  with:
    pipelineId: 80ea2d9ffba94c20b9a0a0be47d3a0d8
    branch: master
  ```
  - pipelineId：调用的流水线的id。
  
  - branch：子流水线运行使用的分支。
    - branch参数可以不定义，表示使用子流水线默认分支运行。
    
    - 若定义branch参数则表示以指定的分支运行，可以引用参数或上下文，如：使用父流水线源的运行分支，假设代码源别名为"my_repo"，则引用形式为${{ sources.my_repo.target_branch }}。
     
   
- **Jenkins任务**
  调用Jenkins任务以扩展并实现自定义动作。
  ```
  uses: Jenkins
  with:
    endpoint: eac965b206e74e2b898a24a4375b6df6
    jobName: job
    params: '{ \"key\":\"value\" }'
    async: true|false
    description: description
  ```
  - endpoint：jenkins扩展点的id。
  
  - jobName：jenkins的job名称。
  
  - params：启动任务传递的参数（json格式）。
  
  - async：是否异步执行。
  
  - description：执行说明。
   
- **挂起流水线**
  配置以挂起当前流水线。
  ```
  uses: SuspendPipeline
  ```
  
- **延时执行**
  让流水线暂停运行一段时间或暂停至指定时间点，用户可以手动继续、终止流水线运行或进行最多3次的额外延时。
  ```
  uses: Delay
  with:
    timerType: delay|scheduled
    delayTime: 300
    scheduledTime: '00:00'
    timeZone: China Standard Time
  ```
  - timerType：延时类型。delay表示延时一段时间；scheduled表示延时至指定时间。
  
  - delayTime：timerType为delay时的延时时间（单位为秒）。
  
  - scheduledTime：timerType为scheduled时的延时时间点。
  
  - timeZone：对应时区，可选值见下表。
  
  
  表1时区 
  | **可选值**                        | **时区**    |
  |:---|:---|
  | GMT Standard Time              | GMT       |
  | South Africa Standard Time     | GMT+02:00 |
  | SE Asia Standard Time          | GMT+07:00 |
  | Singapore Standard Time        | GMT+08:00 |
  | China Standard Time            | GMT+08:00 |
  | Pacific SA Standard Time       | GMT-04:00 |
  | E. South America Standard Time | GMT-03:00 |
  | Central Standard Time (Mexico) | GMT-06:00 |
  | Egypt Standard Time            | GMT+02:00 |
  | Saudi Arabia Standard Time     | GMT+03:00 |
     
  
- **人工审核**
  以单签或会签的方式配置人工审核任务。
  ```
  uses: Checkpoint
  with:
    mode: members|roles
    approvers: 05d8ca972f114765a8984795a8aa4d41
    roles: '3'
    checkStrategy: all|any
    timeout: 300
    timeoutStrategy: reject|pass
    comment: comment
  ```
  - mode：审核模式。members表示按成员审核，roles表示按角色审核。
  
  - approvers：审核模式为members时的审核人员用户id，多个用户以","分隔。
  
  - role：审核模式为roles时的角色，可选值见[表2]，多个角色以","分隔。
  
  - checkStrategy：审核模式为members时的审核策略。all表示需所有人员审核才能通过；any表示任一人员审核即可通过。
  
  - timeout：审核超时时长（单位为秒）。
  
  - timeoutStrategy：审核超时时的策略。reject表示中止；pass表示通过。
  
  - comment：审核描述。
  
  
   表2审核角色 
  | **审核角色**  | **YAML标识** |
  |:---|:---|
  | 项目经理      | '3'        |
  | 开发人员      | '4'        |
  | 测试经理      | '5'        |
  | 测试人员      | '6'        |
  | 参与者       | '7'        |
  | 浏览者       | '8'        |
  | 运维经理      | '9'        |
  | 产品经理      | '10'       |
  | 系统工程师     | '11'       |
  | Committer | '12'       |
     
  
 
