apply

cnb:apply

指定配置文件,绑定到当前 Git 仓库,执行指定事件流水线。

# 适用事件

  • push
  • branch.create
  • pull_request.target
  • pull_request.mergeable
  • tag_push
  • pull_request.merged
  • api_trigger
  • web_trigger
  • crontab
  • tag_deploy

# 参数

# config

  • type: String
  • required: false

完整的 CI 配置文件内容

# configFrom

  • type: String
  • required: false

指定一个本地文件作为配置文件。

# event

  • type: String
  • required: false
  • default: api_trigger

要执行的自定义事件名,必须为 api_trigger 或以 api_trigger_ 开头。

# sync

  • type: Boolean
  • required: false
  • default: false

是否同步执行。

同步模式下会等待本次 apply 流水线执行成功,再执行下一个任务。

# continueOnBuildError

  • type: Boolean
  • required: false
  • default: false

同步模式下,触发的流水线构建失败时,是否继续执行下个任务。

# ignoreGitStatus

  • type: Boolean
  • required: false
  • default: false

是否忽略设置 git status

忽略后流水线将不会出现在 commit checks 中。

# 环境变量相关

当前 Job 可见的,业务定义的环境变量全部传递给新的流水线。

默认值中有如下环境变量,用户无法覆盖

  • APPLY_TRIGGER_BUILD_ID,含义同 CI 默认环境变量中的 CNB_BUILD_ID
  • APPLY_TRIGGER_PIPELINE_ID,含义同 CI 默认环境变量中的 CNB_PIPELINE_ID
  • APPLY_TRIGGER_REPO_SLUG,含义同 CI 默认环境变量中的 CNB_REPO_SLUG
  • APPLY_TRIGGER_REPO_ID,含义同 CI 默认环境变量中的 CNB_REPO_ID
  • APPLY_TRIGGER_USER,含义同 CI 默认环境变量中的 CNB_BUILD_USER
  • APPLY_TRIGGER_BRANCH,含义同 CI 默认环境变量中的 CNB_BRANCH
  • APPLY_TRIGGER_COMMIT,含义同 CI 默认环境变量中的 CNB_COMMIT
  • APPLY_TRIGGER_COMMIT_SHORT,含义同 CI 默认环境变量中的 CNB_COMMIT_SHORT
  • APPLY_TRIGGER_ORIGIN_EVENT,含义同 CI 默认环境变量中的 CNB_EVENT
  • CNB_PULL_REQUEST_ID,含义同 CI 默认环境变量中的 CNB_PULL_REQUEST_ID
  • CNB_PULL_REQUEST_IID,含义同 CI 默认环境变量中的 CNB_PULL_REQUEST_IID
  • CNB_PULL_REQUEST_MERGE_SHA,含义同 CI 默认环境变量中的 CNB_PULL_REQUEST_MERGE_SHA

# config 取值优先级

按以下顺序依次取值,取到为止:

  1. config
  2. configFrom
  3. 当前仓库 .cnb.yml
    1. 若在 pull_request.merged 事件中调用 apply 内置任务,取合并后的配置文件
    2. 若在 pull_request.targetpull_request.mergeable 事件中调用 apply 内置任务,取目标分支的配置文件
    3. 其他情况取当前分支配置文件

configFrom 只支持本地文件如 ./test/.cnb.yml,远程文件可先自行下到本地。

# 输出结果

{
  "sn": "cnb-i5o-1ht8e12hi", // 构建号
  "buildLogUrl": "http://xxx.com/my-group/my-repo/-/build/logs/cnb-i5o-1ht8e12hi", // 构建日志链接
  "message": "success",
  "buildSuccess": true, // 触发的构建是否成功,此key仅在同步模式下存在
  "lastJobExports": {} // 触发的流水线最后一个job导出的环境变量
}

# 配置样例

main:
  push:
    - stages:
        - name: trigger
          type: cnb:apply
          options:
            configFrom: ./test/.cnb.yml
            event: api_trigger_test
main:
  push:
    - stages:
        - name: trigger
          type: cnb:apply
          options:
            config: |
              main:
                api_trigger_test: 
                - stages:
                  - name: test
                    script: echo test

            event: api_trigger_test
main:
  push:
    - stages:
        - name: trigger
          type: cnb:apply
          options:
            # 执行当前配置文件的其它事件
            event: api_trigger_test
  api_trigger_test:
    - stages:
        - name: test
          script: echo test
main:
  push:
    - stages:
        - name: trigger
          type: cnb:apply
          options:
            configFrom: .xxx.yml
            event: api_trigger_test
            sync: true