
# YAML文件语法配置说明
 #### 单任务构建代码示例
```
---
version: 2.0
#构建参数定义, 参数必须以name，value成对出现，不赋值默认为空字符串，引用方式为${申明的参数名称name}
params:
  - name: machineArch
    value: X86
#构建环境配置，env和envs配置为非必填项，二选一。当用户需要使用条件判断确定使用的主机规格与类型时，选择配置envs
env:
  resource:
    type: docker
    arch: X86
    class: 8U16G
    pool: Mydocker
envs:
  - condition: machineArch == 'ARM'
    resource:
      type: docker 
      arch: ARM
  - condition: machineArch == 'X86'
    resource:
      type: docker
      arch: X86
#构建步骤
steps:
  PRE_BUILD:
    - checkout:
        name: checkout
        inputs:
          scm: codehub
          url: git@codehub.devcloud.{region}.example.com:huang-test00001/maven.git
          branch: master
          commit: commitId
          lfs: true
          submodule: true
          depth: 100
          tag: tag
          path: test
    - manifest_checkout:
        name: "manifest"
        inputs:
          manifest_url: https://codehub.devcloud{region}.example.com/IPD-xxxxxx/manifest.git
          manifest_branch: master
          manifest_file: default.xml
          path: dir/dir02
          lfs: true
          repo_url: https://codehub.devcloud.{region}.example.com/IPD-xxxxxx/git-repo.git
          repo_branch: master
          username: someone
          password: PASSWD
    - sh:
        inputs:
          command: echo ${machineArch}
  BUILD: # 构建步骤
    - maven:
        name: Maven构建
        image: cloudbuild@maven3.5.3-jdk8-open
        inputs:
          settings:
            public_repos:
              - https://mirrors.example.com/maven
          cache: true
          unit_test:
            coverage: true
            ignore_errors: false
            report_path: "**/TEST*.xml"
            enable: true
            coverage_report_path: "**/site/jacoco"
          command: mvn package -Dmaven.test.failure.ignore=true -U -e -X -B
          check:
            project_dir: ./
            settings: ~/.m2/settings.xml
            param: ''
    - upload_artifact:
        inputs:
          path: "**/target/*.?ar"
          version: 2.1
          name: packageName
```
表1单任务语法配置说明 
| **参数**                                              | **类型** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | **是否必填** |
|:---|:---|:---|:---|
| version                                             | string | YAML文件版本号配置项，用于指定YAML文件版本号。固定值，目前只支持2.0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 是        |
| params                                              | map    | 全局参数配置项，参数必须以name和value成对出现，不赋值默认为空字符串，引用方式为${申明的参数名称name}。 示例中定义的参数，引用方式：作为参数输入时使用${machineArch}，作为condition条件判断时使用申明的参数名称machineArch。 - name：参数名称。  - value：参数名称对应的参数值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 否        |
| env                                                 | map    | 构建环境配置项，与envs配置功能相同，两者配置其一即可，不支持条件语句condition。使用示例可参考[配置构建环境](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_1047.html)。 - resource：构建环境资源信息。  - type：资源池类型，可输入参数值（docker或custom），docker表示使用默认执行机，custom表示使用自定义执行机，必填项。  - arch：构建执行机架构，可输入参数值（X86或ARM），必填项。  - class：构建执行机规格，可输入参数值（2U8G、4U8G、8U16G、16U32G、16U64G），当type=docker时该参数生效，默认为2U8G，其他规格需要单独购买对应规格的并发包才能正常使用，非必填。  - pool：自定义资源池名称，当type=custom时该参数生效，非必填。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 否        |
| envs                                                | map    | 构建环境配置项，与env配置功能相同，两者配置其一即可，支持条件语句condition，可以更加灵活的根据不同场景使用同一个YAML文件。 - condition：条件判断语句，符合当前条件判断的会使用对应resource配置的环境信息。  - resource：构建环境资源信息。  - type：资源池类型，可输入参数值（docker或custom），docker表示使用默认执行机， custom表示使用自定义执行机，必填项。  - arch：构建执行机架构，可输入参数值（X86或ARM），必填项。  - class：构建执行机规格，可输入参数值（2U8G、4U8G、8U16G、16U32G、16U64G），当type=docker时需要填写该参数，默认为2U8G，其他规格需要单独购买对应规格的并发包才能正常使用，非必填。  - pool：自定义资源池名称，当type=custom时需要填写该参数，非必填。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 否        |
| steps                                               | map    | 构建步骤执行配置项，配置构建流程，包括构建前准备，构建执行的具体任务。 - PRE_BUILD：构建前准备工作配置项，一般用作于构建前的代码下载工作。  - BUILD：构建任务配置项，用于执行业务相关的具体构建任务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 是        |
| steps： PRE_BUILD | map    | 构建前准备工作配置项，一般用作于构建前的代码下载工作，目前只支持checkout、manifest_checkout 和sh配置项，一般情况配置其中一种即可。 - checkout：单代码仓下载。使用示例可参考[代码化构建（单仓下载）](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_1067.html#codeci_ug_1067__section14128194452616)。 - name：构建步骤名称，支持自定义名称，非必填，默认值"代码检出"。  - inputs：步骤输入参数，每个步骤的输入参数不同，详见具体[构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0057.html)说明，必填项。  - scm：代码源，当前只支持codehub，非必填，默认值codehub。  - url：拉取代码的ssh地址或者https地址。codehub拉取代码时为ssh，其他代码源为https，必填项。  - branch：拉取的代码分支名，必填项。  - commit：commitId构建时拉取的commitId，非必填。  - lfs: 是否开启git lfs，非必填，默认值false。  - submodule：是否拉取子模块，非必填，默认值false。  - depth：浅克隆深度。选择commitId构建时，depth必须大于等于commitId所在深度，非必填，默认值1。  - tag：tag构建时拉取的tag名，如果commit和tag同时存在，优先执行commit构建，非必填。  - path：clone的子路径，代码将会下载到子目录下面，非必填。    - manifest_checkout: 多代码仓下载。 - name：构建步骤名称，支持自定义名称，非必填，默认值"manifest_checkout"。  - inputs：步骤输入参数，每个步骤的输入参数不一样，详见具体[构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0057.html)说明，必填项。  - manifest_url：指定manifest仓地址，包含xml文件的仓库，必填项。  - manifest_branch：指定manifest分支或revision，非必填，默认值HEAD。  - manifest_file：manifest文件路径，定义的多仓库必须为同一种源码源，非必填，默认值default.xml。  - path：自定义manifest所有子仓下载路径，为工作目录的相对路径路径，不能以"/"开头，不能包含"."，非必填，默认值为当前工作目录。  - lfs：是否开启git lfs，非必填，默认值false。  - repo_url：repo仓库地址，非必填。  - repo_branch：repo仓库分支，非必填，默认值stable。  - username：下载仓库时使用的用户名，下载非公开仓库时需填写，非必填。  - password：下载仓库时使用的密码，下载非公开仓库时需填写，非必填。    - sh：执行shell命令。 - inputs：步骤输入参数，每个步骤的输入参数不一样，详见具体[构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0057.html)说明，必填项。  - command：执行shell命令，当checkout或manifest_checkout无法满足业务诉求时，可以自定义编写shell命令进行构建前的准备工作，必填项。     | 是        |
| steps： BUILD        | map    | 构建任务配置项，用于执行业务相关的具体构建任务，只支持特定构建步骤，构建步骤根据业务实际情况进行自由组合，具体构建步骤参考[选择构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_01_0067.html)。 - maven：Maven构建步骤定义。 - name：构建步骤名称，支持自定义名称，非必填，默认值"Maven构建"。  - image：构建使用的容器镜像，支持自定义和默认镜像，默认镜像名称为"cloudbuild@"加上工具版本名称，工具版本名称可以参考[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)，必填项。  - inputs：步骤输入参数，每个步骤的输入参数不一样，详见具体[构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0057.html)说明，必填项。  - settings：maven构建的settings配置，非必填。  - public_repos：指定依赖包下载仓库地址。  - cache：是否开启缓存，非必填，默认值true。  - unit_test：单元测试，非必填。  - coverage：是否处理覆盖率数据，非必填，默认值false。  - ignore_errors：是否忽略单元测试错误，非必填，默认值true。  - report_path：单元测试数据路径，必填项。  - enable：是否处理单元测试数据，非必填，默认值true。  - coverage_report_path：覆盖率数据路径，非必填。  - command：执行构建命令，必填项。  - check：检查配置，非必填。  - project_dir：工程路径，必填项。  - settings：maven构建的settings路径，非必填。  - param：maven参数，非必填。    - upload_artifact：上传二进制包至artifact仓库构建步骤定义。 - inputs：步骤输入参数，每个步骤的输入参数不一样，详见具体[构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0057.html)说明，必填项。  - path：上传文件的路径及名称，支持通配符，必填项。  - version：版本名称，非必填，默认值以构建编号命名。  - name：文件名，非必填，默认值以文件原始名命名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 是        |
   
#### 多任务构建
```
---
version: 2.0
#构建参数定义, 参数必须以name，value成对出现，不赋值默认为空字符串，引用方式为${申明的参数名称name}
params:
  - name: machineArch
    value: X86
  - name: jobCondition
    value: 1
  - name: jobsCondition
    value: 1
# 构建环境配置，env和envs配置为非必填项，二选一。当用户需要使用条件判断确定使用的主机规格与类型时，选择配置envs
env:
  resource:
    type: docker
    arch: X86
    class: 8U16G
    pool: Mydocker
envs: 
  - condition: machineArch == 'ARM'
    resource:
      type: docker 
      arch: ARM
  - condition: machineArch == 'X86'
    resource:
      type: docker
      arch: X86
# buildflow和buildflows配置二选一。当需要使用条件判断执行的jobs时，选择配置buildflows
buildflow:
  strategy: Lazy
    jobs:
      - job: Job3
        depends_on:
          - Job1
          - Job2
        build_ref: .cloudbuild/build3.yml
      - job: Job1
        build_ref: .cloudbuild/build1.yml
      - job: Job2
        build_ref: .cloudbuild/build2.yml
buildflows:
  - condition: jobsCondition == 1
    jobs:
      - job: Job1
        build_ref: .cloudbuild/build1.yml
        params:
          - name: job1Params
            value: 1
      - condition: jobCondition == 1
        job: Job2
        build_ref: .cloudbuild/build2.yml
        params:
          - name: job2Params
            value: 2
      - job: Job3
        depends_on:
          - Job1
          - Job2
        build_ref: .cloudbuild/build3.yml
  - condition: jobsCondition == 2
    jobs:
      - job: Job3
        build_ref: .cloudbuild/build3.yml
```
表2多任务语法配置说明 
| **参数**     | **类型** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | **是否必填** |
|:---|:---|:---|:---|
| version    | string | YAML文件版本号配置项，用于指定YAML文件版本号。固定值，目前只支持2.0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 是        |
| params     | map    | 全局参数配置项，参数必须以name和value成对出现，不赋值默认为空字符串，引用方式为${申明的参数名称name}。 示例中定义的参数，引用方式：作为参数输入时使用${machineArch}，作为condition条件判断时使用申明的参数名称machineArch。 - name：参数名称。  - value：参数名称对应的参数值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 否        |
| env        | map    | 构建环境配置项，与envs配置功能相同，两者配置其一即可，不支持条件语句condition。 - resource：构建环境资源信息。  - type：资源池类型，可输入参数值（docker或custom），docker表示使用默认执行机，custom表示使用自定义执行机，必填项。  - arch：构建执行机架构，可输入参数值（X86或ARM），必填项。  - class：构建执行机规格，可输入参数值（2U8G、4U8G、8U16G、16U32G、16U64G），当type=docker时该参数生效，默认为2U8G，其他规格需要单独购买对应规格的并发包才能正常使用，非必填。  - pool：自定义资源池名称，当type=custom时该参数生效，非必填。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 否        |
| envs       | map    | 构建环境配置项，与env配置功能相同，两者配置其一即可，支持条件语句condition，可以更加灵活的根据不同场景使用同一个YAML文件。 - condition：条件判断语句，符合当前条件判断的会使用对应resource配置的环境信息。  - resource：构建环境资源信息。  - type：资源池类型，可输入参数值（docker或custom），docker表示使用默认执行机， custom表示使用自定义执行机，必填项。  - arch：构建执行机架构，可输入参数值（X86或ARM），必填项。  - class：构建执行机规格，可输入参数值（2U8G、4U8G、8U16G、16U32G、16U64G），当type=docker时需要填写该参数，默认为2U8G，其他规格需要单独购买对应规格的并发包才能正常使用，非必填。  - pool：自定义资源池名称，当type=custom时需要填写该参数，非必填。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 否        |
| buildflow  | map    | 在CodeArts Build中Build Job是构建的最小单元，适用于业务比较简单的场景，但是在有些复杂的构建场景下，Build Job可能并不能满足复杂的构建要求，比如多仓工程需要分布到多个机器上去构建，并且构建工程之间还存在一定的依赖关系，又或者希望将Build Job中的构建任务拆分成更加模块化，更加细粒度的构建任务，并按照依赖顺序进行构建。对于比较复杂的构建场景，可以使用BuildFlow将多个有依赖关系的Build Job按照有向无环图（DAG）的方式组装起来，CodeArts Build将会按照构建的依赖关系以最大的并发进行构建，提升构建效率。 - strategy：定义buildFlow运行的策略，支持Lazy（构建时间相对较长，但是可以节省构建资源，在资源池资源不足时使用，优先触发优先级高的子任务构建）和Eager（构建时间相对较快，可能造成资源空闲等待，在资源池充足时推荐使用，同步触发所有任务），非必填，默认值Eager。  - jobs：任务编排，定义子job之间的依赖关系，必填项。  - job：子任务名称，必填项。  - depends_on：是否依赖子任务，填写依赖子任务的job名称，当前job依赖于Job1和Job2，非必填。  - build_ref：当前job构建使用的YAML文件路径（相对于仓库根目录），YAML文件是一个独立的可执行构建的完整文件，参考[单任务构建代码示例]，必填项。  - job：子任务名称，必填项。 build_ref：当前job构建使用的YAML文件路径（相对于仓库根目录），必填项。   - job：子任务名称，必填项。 build_ref：当前job构建使用的YAML文件路径（相对于仓库根目录），必填项。                                                                                                                                                                                                                                                                                                                                                                      | 是        |
| buildflows | map    | 当buildflow中需要做条件判断时使用buildflows，针对不同业务场景进行适配，更好的对YAML文件进行通用。 - condition：条件判断语句，符合当前条件判断的会使用对应jobs配置，condition必须放在buildflows下面。  - jobs：任务编排，定义子job之间的依赖关系，必填项。  - job：子任务名称，必填项。 build_ref：当前job构建使用的YAML文件路径（相对于仓库根目录），YAML文件是一个独立的可执行构建的完整文件，参考[单任务构建代码示例]，必填项。   - params：子任务定义的参数，作用域为子任务引用的YAML文件，可以在子任务使用的YAML文件中引用此处定义的参数，非必填。 - name：参数名称。  - value：参数名称对应的参数值。    - condition：条件判断语句，符合当前条件判断的会使用对应job配置。  - job：子任务名称，必填项。 build_ref：当前job构建使用的YAML文件路径（相对于仓库根目录），必填项。   - params：子任务定义的参数，作用域为子任务引用的YAML文件，非必填。 name：参数名称。 value：参数名称对应的参数值。   - job：子任务名称，必填项。 depends_on：是否依赖子任务，填写依赖子任务的job名称，当前job依赖于Job1和Job2，非必填。 build_ref：当前job构建使用的YAML文件路径（相对于仓库根目录），必填项。    | 是        |
   
