本文为您介绍如何通过自定义步骤 output 定义输出产物,并在下游任务/步骤中引用该产物。
定义自定义步骤的 YAML 内容,并上传至持续交付控制台。
登录 持续交付控制台,在左侧导航栏选择 模板市场 > 步骤模板。
在步骤模板页面,单击 创建自定义步骤,弹出创建自定义步骤面板。
在左侧输入框,按照自定义步骤的 YAML 要求,编写步骤内容。
注意
需通过 outputs 定义产物,并在 script 中传递产物,将产物写入 /tekton/results/<产物name>_${CP_STEP_NAME}
文件中。详情请参见示例的注释信息。
本文使用的 YAML 示例如下:
# 自定义步骤名称,必填项。支持英文大小写、数字、“-”中横线,长度 2~50,不允许重名。 step: test-output # 自定义步骤版本,必填项。要求格式为 x.y.z,且 x,y,z 均为 [0,100] 的整数。 version: 1.0.0 # 自定义步骤的显示名称,必填项。支持中英文大小写、数字、“-”中横线,长度 2~50。用作步骤名称展示,不允许为空、不允许重名。 displayName: 自定义步骤输出产物 # 自定义步骤描述,非必填。200个字符以内,支持中英文大小写特殊字符。 description: 通过outputs字段来指定多个需要输出的产物,并允许下游任务/步骤引用 # 分类,必填项。目前仅支持以下分类:【构建】Build 、【测试】Test、 【部署】Deploy、 【镜像仓库】Registry、 【命令执行】Command、 【其他】Other category: Other # 运行时镜像,必填项。支持公有镜像和私有镜像。 image: xxx.cr.volces.com/ns/busybox:latest # 定义步骤的输入信息,非必填。支持配置多条步骤入参。详细介绍请参见 https://www.volcengine.com/docs/6461/1108787。 inputs: - name: arg1 displayName: 参数一输入 type: string required: true uiConfig: type: CodeEditor - name: arg2 displayName: 参数二输入 type: string required: true uiConfig: type: CodeEditor # 定义步骤的输出信息,非必填。 outputs: - name: result1 displayName: 第一个产物结果 type: string - name: result2 displayName: 第二个产物结果 type: string # 运行脚本,必填项、不能为空。作用类似于 Dockerfile 文件中的 ENTRYPOINT,用于指定容器启动程序及参数。 script: | # 获取两个参数的输入 result1='$(inputs.arg1)' result2='$(inputs.arg2)' # 产物需要通过文件进行传递,因此在运行脚本中,需要将产物信息写入到固定目录下的文件中 # 要写入的固定目录为:/tekton/results/ # 每个产物需分别将内容写入到目录下文件中,文件名格式为:<产物name>_${CP_STEP_NAME} # 如下所示,将第一个产物 result1的内容写入到 /tekton/results/result1_${CP_STEP_NAME}文件中 echo -n "$result1" > /tekton/results/result1_${CP_STEP_NAME} # 如下所示,将第二个产物 result2的内容写入到 /tekton/results/result2_${CP_STEP_NAME}文件中 echo -n "$result2" > /tekton/results/result2_${CP_STEP_NAME}
编写完成后,单击 确定。 创建成功的自定义步骤将展示在对应分类下。
通过在流水线中编排一个串联的自定义步骤和命令执行任务,介绍如何在下游命令执行任务中引用上游自定义步骤的产物。
配置自定义步骤。
填写自定义步骤的参数信息。本示例参数一输入:hello arg1
;参数二输入:hello arg2
。
在任务输出处复制自定义步骤的产物表达式,备用。
配置命令执行任务。
新增一个阶段,添加命令执行任务。
填写执行的命令:使用上文复制的表达式,输出上游的两个产物信息。
注意
引用上游产物的表达式格式为:$(你的产物表达式)
。
单击 保存,保存流水线编排。
在当前流水线详情页面,单击 立即运行。
在弹出的确认框中,单击 确定。 流水线开始运行,系统跳转至当前流水线的详情页面。
结合当前流水线编排可知,预期将输出以下信息:
上游第一个产物为: hello arg1 上游第二个产物为: hello arg2
查看流水线运行结果,由命令执行任务的日志信息可看出结果符合预期。