使用异步子管道触发阶段
您可以使用异步子管道触发添加到 .pipeline-config.yaml 配置文件中的任何阶段。 你不需要将这些阶段添加到管道中,也不需要修改管道。
请参见以下示例代码:
setup:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
source "${ONE_PIPELINE_PATH}"/tools/trigger-task
set_env "variable-for-my-custom-task" "foo_bar"
export_env "variable-for-my-custom-task"
trigger-task "my-custom-task"
my-custom-task:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
if [[ "$PIPELINE_DEBUG" == 1 ]]; then
trap env EXIT
env
set -x
fi
printf "Test custom stage to trigger async"
list_repos
list_artifacts
get_env "variable-for-my-custom-task"
为触发该阶段,可使用网络挂钩密文创建网络挂钩触发器。 网络钩子密文可在 管道参数 和 Subpipeline Webhook Trigger 的属性中找到,即 subpipeline-webhook-token。 有关更新 subpipeline-webhook-token 值的更多信息,请参阅 更新异步阶段网络钩子。
新触发的管道名称是阶段名称(如 my-custom-task ),因此要确保阶段名称是有效的管道运行名称。 阶段名称用于在 Kubernetes 资源上创建名称或 ID。 Kubernetes 中的对象名称和 ID 必须遵循 RFC 1123 或 RFC 1035:
- 最多包含 63 个字符。
- 只包含小写字母数字字符或连字符"-"。
- 以字母数字字符开头。
- 以字母数字字符结束。
向异步管道传递数据
您可以传递运行舞台所需的变量,为此可以使用 pipelinectl 来实现。
您可以按照以下步骤在两个管道之间传递数据:
- 在触发同步流水线之前,使用
set_env保存变量。 请注意,这可能发生在触发阶段之前的管道中。 您不需要使用两次set_env。 - 用
export_env标记变量,以便在异步管道运行时导出它。 - 在异步管道中使用
get_env,就可以使用任何标记为导出的变量。
set_env <variable-name> <variable-value>
export_env <variable-name>
get_env <variable-name>
只有被标记的变量才能在异步管道中使用。 并非所有数据都能导出,因为数据可能过于庞大或包含敏感数据。
触发异步管道命令
使用以下命令触发阶段:
trigger-task <stage-name>
示例代码
setup:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
source "${ONE_PIPELINE_PATH}"/tools/trigger-task
set_env "variable-for-my-custom-task" "foo_bar"
export_env "variable-for-my-custom-task"
trigger-task "my-custom-task"
该命令会触发管道配置 yaml 中的任务。 例如,trigger-task owasp-zap。
触发管道中可访问的内容
在以前的管道中保存和导出的每个版本库和工件(使用 set_env from pipelinectl 和 export_env 工具 )保存和导出的每个版本库和工件,在新的触发式异步管道中也同样可用。 仓库会与前一个管道中的提交一起克隆到相同的工作空间相关文件夹中。 版本库的提交必须保存在 pipelinectl 中,这样管道才能克隆相同状态的版本库。
使用 list_repos 和 list_artifacts. 您可以获取已构建的所有工件和已克隆的所有软件源,但必须将它们保存在
pipelinectl.
不可用 在触发管道运行(例如,npm install)的先前任务中对工作区所做的任何更改都不可用,因为我们无法将所有工作区传递到新的触发管道运行中。
如何查询已触发管道的状态
API curl 调用
while [ "$STATE" = "running" -o "$STATE" = "waiting" -o "$STATE" = "queued" -o "$STATE" = "pending" ]; do
PIPELINE_STATUS=$(curl -s -k -X GET \
--header "Authorization: Bearer $IAM_ACCESS_TOKEN" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
$CD_PIPELINE_RUN_URL)
STATE=$(echo $PIPELINE_STATUS | jq -r '.status .state')
echo $STATE
sleep 10
done
ibmcloud云客户端调用
ibmcloud dev tekton-pipelinerun [pipelineID] --run-id [pipelinerunID] [--output JSON]
ibmcloud dev tekton-pipelinerun ls [pipelineID]
更多信息,请参阅 IBM Cloud CLI(tekton-pipelinerun)命令。
有关使用 CLI 触发管道的更多信息,请参阅 使用触发器