将 Markdown 输出到 Overview 选项卡(PipelineRuns 和 TaskRuns)

本指南将介绍如何通过将 Markdown 写入名为 overview-markdown 的 Task Result,在 PipelineRuns 和 TaskRuns 的 Overview 选项卡中展示人类可读报告。

先决条件

  • 集群上已安装 Tekton Pipelines。
  • 可选但建议: 已部署 Tekton Results,这样即使旧的 TaskRuns/PipelineRuns 被垃圾回收,你的摘要仍然可以被查询。

为什么要使用 Tekton Results?如果集群会积极清理运行记录,那么集群内的 TaskRun/PipelineRun 对象(及其结果)可能会消失。Tekton Results 提供了一个集中式存储,因此历史 Overview 报告仍然可以访问。

工作原理

  • UI 会读取 Task 中名为 overview-markdown 的 result,且名称必须完全一致。
  • 你写入该 result 文件中的任何 Markdown,都会在运行的 Overview 选项卡中渲染。
  • 在 Pipeline 中,每个 Task 都可以生成自己的 overview-markdown,Overview 选项卡会按 Task 分组显示它们。
  • 对于 Overview 选项卡,你不需要向 Pipeline result 写入内容;只需写入 Task 的 overview-markdown 即可。

限制: 默认情况下,单个 Task 的 result 值限制为 4 KB。请保持摘要简洁;在需要时链接到更大的制品。如果你需要更复杂的布局,请参阅 模板渲染。如果你想配置 result 大小限制,可以参考 写入 Tekton Task Results 时超出 Result 限制。

步骤

1. 定义一个名为 overview-markdown 的 Task result

创建(或更新)你的 Task,使其声明一个名称完全一致的字符串 result。

在 Task 的某个 step 中,将 Markdown 写入 $(results.overview-markdown.path)。

Task 示例(按需替换 <image>):

apiVersion: tekton.dev/v1
kind: Task
metadata:
  name: demo-markdown-overview
spec:
  results:
    - name: overview-markdown
      description: "Markdown content displayed in the Overview tab."
      type: string
  steps:
    - name: write-markdown
      image: <image>
      script: |
        #!/bin/bash
        # Write Markdown to the result path.
        cat >"$(results.overview-markdown.path)" <<'EOF'
        # Demo Overview

        **Status:** ✅ Success

        **Artifacts**
        - Image: `ghcr.io/example/app:v1.2.3`
        - SBOM: `sbom.spdx.json`

        **Notes**
        - Lint passed.
        - 0 critical vulnerabilities found.

        _Generated by **demo-markdown-overview**._
        EOF

请保持 Markdown 简短且聚焦。默认情况下,单个 Task 的 result 值限制为 4 KB。对于较长的报告:

  • 将完整制品(例如 HTML、JSON、PDF)上传到你的存储或制品仓库。
  • 在 Markdown 中放置一个链接(例如 [完整报告](https://artifact.example.com/run/123/report.html))。

如果你想配置 result 大小限制,可以参考 写入 Tekton Task Results 时超出 Result 限制。

2. 运行 Task

创建一个引用该 Task 的 TaskRun,等待其完成。

TaskRun 示例:

apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
  name: demo-markdown-overview-run
spec:
  taskRef:
    name: demo-markdown-overview

3. 查看 Overview

TaskRun 完成后,打开 TaskRun 的 Overview 选项卡即可查看渲染后的 Markdown。

如果没有任何内容渲染,请检查 step 日志,确认文件已写入 $(results.overview-markdown.path),并且 result 名称正确。

4. (可选)在 Pipelines 中使用

在 Pipeline 中,每个 Task 都可以输出自己的 overview-markdown。Overview 选项卡会按 Task 显示独立的部分(例如 lint、scan、build)。

对于此功能,你不需要使用 Pipeline 的 results。Overview 选项卡仅渲染 Task results。

Pipeline 示例(按需替换 <lint-image> <scan-image>):

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: pipeline-with-summaries
spec:
  tasks:
    - name: lint
      taskSpec:
        results:
          - name: overview-markdown
            description: "Lint overview"
            type: string
        steps:
          - name: run-lint
            image: <lint-image>
            script: |
              #!/bin/bash
              cat >"$(results.overview-markdown.path)" <<'EOF'
              ## Lint Overview

              - Files checked: **128**
              - Issues: **0**
              - Tool: `golangci-lint 1.57.2`
              EOF

    - name: scan
      runAfter: [lint]
      taskSpec:
        results:
          - name: overview-markdown
            description: "Security scan overview"
            type: string
        steps:
          - name: run-scan
            image: <scan-image>
            script: |
              #!/bin/bash
              cat >"$(results.overview-markdown.path)" <<'EOF'
              ## Security Scan

              **Findings**
              - Critical: **0**
              - High: **1** (CVE-2025-XXXX)
              - Medium: **3**
              EOF

PipelineRun 示例:

apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  name: pipeline-with-summaries-run
spec:
  pipelineRef:
    name: pipeline-with-summaries

打开 PipelineRun 的 Overview 选项卡。你应该会看到两个 Markdown 部分:lint 和 scan。

提示

  • 名称必须完全一致: result 必须命名为 overview-markdown(区分大小写)。
  • 写入正确位置: 始终写入 $(results.overview-markdown.path)。你不需要 Pipeline 级别的 result。
  • 大小限制: 默认情况下,单个 Task result 值上限为 4 KB。如果你想配置 result 大小限制,可以参考 写入 Tekton Task Results 时超出 Result 限制。

故障排除

  • Overview 选项卡中没有任何内容
    • 检查 result 名称:它必须完全是 overview-markdown。
    • 验证 step 是否写入了 $(results.overview-markdown.path)。
    • 确认你的 UI 版本支持此功能。
  • Pod 日志显示 termination message overflow