You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tekton中通过Python脚本输出任务结果?

Tekton流水线Python脚本输出结果变量实现

核心原理

Tekton的$(results.myresult)本质是容器内的文件路径,Task运行时会自动创建该文件,只要将结果内容写入这个文件,后续任务就能通过$(results.myresult)读取到结果。同时,Tekton会为每个结果生成对应环境变量,格式为RESULTS_<结果名大写>(比如myresult对应RESULTS_MYRESULT),也可以通过环境变量获取结果文件路径。

实现方式

1. 直接写入结果文件

对应原Bash脚本中printf ... > $(results.myresult)的逻辑,用Python文件操作直接写入结果路径:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: foo
  namespace: bar
spec:
  results:
    - name: myresult
  script: |
    #!/usr/bin/env python3
    import os

    # 执行业务逻辑生成结果
    myvar = "foobar"

    # 方式1:直接使用Tekton替换后的结果路径
    with open('$(results.myresult)', 'w') as f:
        f.write(myvar)

    # 方式2:通过环境变量获取结果路径(更稳妥)
    # result_path = os.environ['RESULTS_MYRESULT']
    # with open(result_path, 'w') as f:
    #     f.write(myvar)

2. 模拟tee命令功能(同时输出到日志和结果文件)

如果需要像原Bash的tee命令一样,既把结果输出到stdout(方便查看流水线日志),又写入结果文件,可在Python中同时执行两种输出操作:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: foo
  namespace: bar
spec:
  params:
    - name: myvar
      type: string
      default: "foobar"
  results:
    - name: myresult
  script: |
    #!/usr/bin/env python3
    import sys
    import os

    # 获取Tekton输入参数(可选)
    input_var = os.environ.get('PARAMS_MYVAR', '')
    # 或者直接使用Tekton替换后的参数值
    # input_var = "$(params.myvar)"

    # 业务处理逻辑
    processed_result = input_var.strip()  # 示例处理

    # 模拟tee:同时输出到stdout和结果文件
    sys.stdout.write(processed_result)
    result_path = os.environ['RESULTS_MYRESULT']
    with open(result_path, 'w') as f:
        f.write(processed_result)

注意事项

  • Tekton会自动替换脚本中的$(results.myresult)和$(params.myvar)为实际路径/参数值,无需手动解析。
  • 确保Python脚本有写入结果文件路径的权限(Task默认运行用户通常具备该权限)。
  • 如果结果内容包含换行,可使用f.write(f"{processed_result}\n")确保换行符被正确写入。

内容的提问来源于stack exchange,提问作者BugsBuggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:30:48