Tekton中如何在不同Task之间传递参数,能否传递首个Task的taskRun名称?
两个Task间传递第一个Task的TaskRun名称实现方案
以下针对Tekton Pipeline场景的两种常用实现方式,按需选择即可:
方式1:直接通过Pipeline上下文变量获取(推荐)
Tekton Pipelines v0.38.0及以上版本内置了Pipeline层面获取指定Task的TaskRun名称的上下文变量,无需修改第一个Task定义,直接在Pipeline中配置传递即可:
- 配置逻辑:在第二个Task的入参中,通过
$(context.pipelineTask.<第一个Task的自定义名称>.taskRunName)取值传入 - 配置示例:
apiVersion: tekton.dev/v1beta1 kind: Pipeline spec: tasks: # 第一个Task定义 - name: task-a taskRef: name: your-first-task-def # 第二个Task定义 - name: task-b runAfter: [task-a] # 确保第一个Task执行完成后再启动 params: # 直接传入第一个Task的TaskRun名称 - name: input-taskrun-name value: $(context.pipelineTask.task-a.taskRunName) taskRef: name: your-second-task-def
- 优势:无需修改原有Task逻辑,配置简单,性能开销低
方式2:通过Task结果传递(兼容旧版本)
如果你的Tekton版本低于v0.38.0,或者需要在第一个Task内对TaskRun名称做加工后再传递,可以用Task结果机制实现:
- 首先修改第一个Task,新增结果输出字段,内部获取自身TaskRun名称写入结果
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: your-first-task-def spec: # 定义输出结果字段 results: - name: my-taskrun-name description: 输出当前Task自身的TaskRun名称 steps: - name: export-taskrun image: alpine:latest script: | # 把自身TaskRun名称写入结果文件 echo -n "$(context.taskRun.name)" > $(results.my-taskrun-name.path)
- 在Pipeline中,将第一个Task输出的结果作为参数传给第二个Task即可
apiVersion: tekton.dev/v1beta1 kind: Pipeline spec: tasks: - name: task-a taskRef: name: your-first-task-def - name: task-b runAfter: [task-a] params: # 引用第一个Task的输出结果作为入参 - name: input-taskrun-name value: $(tasks.task-a.results.my-taskrun-name) taskRef: name: your-second-task-def
- 优势:兼容性强,支持所有带有Task结果功能的Tekton版本,支持对传递的名称做自定义加工后再输出
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

