Tekton Hub 编写 Pipelines

概述

本指南介绍了为 Tekton Hub 目录创建可用 Pipelines 时的具体要求和最佳实践。内容重点涵盖 Hub 特定元数据、验证以及组合标准。

Hub 特定元数据

Hub 的必需标签

metadata:
  name: my-custom-pipeline
  labels:
    app.kubernetes.io/version: "0.1"  # Must match catalog version directory

Hub 的必需注解

metadata:
  annotations:
    tekton.dev/pipelines.minVersion: "0.17.0"    # Minimum Tekton version
    tekton.dev/categories: "Integration & Delivery"  # Hub category
    tekton.dev/tags: "ci,build,test,deploy"     # Hub search tags
    tekton.dev/displayName: "CI/CD Pipeline"    # Hub display name
    tekton.dev/platforms: "linux/amd64,linux/arm64"  # Supported platforms

Hub Task 引用

Hub 的 Catalog Task 引用

spec:
  tasks:
  - name: git-clone
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: "catalog"  # Hub catalog name
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: git-clone  # Task name from Hub
      - name: version
        value: "0.9"      # Task version
    params:
    - name: url
      value: $(params.repo-url)
    workspaces:
    - name: output
      workspace: source-code

Hub 类别和标签

标准 Pipeline 类别

  • Integration & Delivery
  • Continuous Integration
  • Continuous Deployment
  • Testing
  • Security
  • Build & Package

有效的 Pipeline 标签策略

  • 使用特定于工作流的标签(cicdcicd
  • 包含技术栈(nodejsjavapythongolang
  • 添加部署目标(kubernetescloudcontainers

Hub 参数标准

Hub 特定参数要求

spec:
  params:
  - name: repo-url
    description: "Git repository URL for source code"  # Clear description for Hub UI
    type: string
  - name: target-environment
    description: "Deployment target environment"
    type: string
    default: "development"  # Sensible default
  - name: build-args
    description: "Additional build arguments"
    type: array
    default: []  # Safe default for arrays

Hub Pipeline 模板

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: my-hub-pipeline
  labels:
    app.kubernetes.io/version: "0.1"  # Match catalog version
  annotations:
    tekton.dev/pipelines.minVersion: "0.17.0"
    tekton.dev/categories: "Integration & Delivery"  # Hub category
    tekton.dev/tags: "ci,build,deploy"               # Hub search tags
    tekton.dev/displayName: "My CI/CD Pipeline"      # Hub display name
    tekton.dev/platforms: "linux/amd64,linux/arm64"  # Platforms
spec:
  description: >-
    Pipeline description for Hub documentation
  params:
  - name: git-url
    description: Git repository URL
  - name: image-name
    description: Container image name
    default: "myapp:latest"
  workspaces:
  - name: source-code
    description: Source code workspace
  - name: registry-creds
    description: Distribution registry credentials
    optional: true

  tasks:
  - name: fetch-source
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: "catalog"
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: git-clone  # Reference Hub catalog task
      - name: version
        value: "0.9"
    params:
    - name: url
      value: $(params.git-url)
    workspaces:
    - name: output
      workspace: source-code

  - name: build-image
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: "catalog"
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: buildah    # Reference Hub catalog task
      - name: version
        value: "0.4"
    runAfter: [fetch-source]
    params:
    - name: image
      value: $(params.image-name)
    workspaces:
    - name: source
      workspace: source-code
    - name: registryconfig
      workspace: registry-creds

  finally:
  - name: cleanup
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: "catalog"
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: cleanup-workspace
      - name: version
        value: "0.1"
    workspaces:
    - name: source
      workspace: source-code

Hub 最佳实践

HubTask 组合

  • 尽可能使用来自同一 Hub catalog 的 Tasks
  • 引用特定的 Task 版本以保证稳定性
  • 提供清晰的参数映射
  • 记录 Task 依赖关系

Hub 的工作区管理

  • 使用具有描述性的工作区名称和说明
  • 将可选工作区标记为 optional: true
  • 记录 Task 之间的工作区数据流
  • 尽可能减少工作区需求

HubPipeline 可复用性

  • 面向通用使用场景进行设计
  • 提供灵活的参数
  • 包含合理的默认值
  • 支持多种部署场景

Hub 测试要求

必需的 Pipeline 测试文件

  • 提供可正常工作的 samples/ 目录及 PipelineRun 示例
  • 包含展示典型用法的 run.yaml
  • 使用不同的参数组合进行测试
  • 验证工作区配置
  • 测试错误处理场景

Hub Pipeline 验证清单

  • 已提供必需的 Hub 元数据
  • 示例 PipelineRun 可正常工作
  • 所有参数都已用描述进行文档化
  • 工作区已正确说明
  • Task 引用使用了 Hub catalog 的 tasks
  • 已验证平台兼容性
  • 包含用于清理的 finally tasks

Hub Pipelines 的安全性

Hub 安全要求

  • 不要在 Pipeline 定义中硬编码密钥
  • 使用安全的 Task 引用
  • 记录所需的 service account 权限
  • 遵循最小权限原则
  • 验证输入参数

文档要求

Hub Pipeline 文档标准

  • pipeline 目录中包含完整的 README.md
  • 记录完整的工作流和用途
  • 提供清晰的参数说明
  • 包含使用示例和常见配置
  • 记录前置条件和依赖项
  • 说明工作区要求
  • 包含故障排查指南

Hub 发布清单

✅ Hub 合规性

  • 已提供必需的 Hub 元数据(标签和注解)
  • 版本标签与目录结构匹配
  • 所有参数都具有清晰的描述
  • 工作区已正确文档化
  • 使用了 Hub catalog 的 Task 引用
  • 已指定平台兼容性
  • 提供了可工作的示例 PipelineRun
  • 包含带使用示例的完整 README
  • 满足 Hub 验证要求

✅ 质量标准

  • Pipeline 可在不同环境中复用
  • 已实现错误处理和清理
  • 没有硬编码的值或密钥
  • 遵循安全最佳实践
  • 已验证跨平台兼容性
  • 文档完整且准确
  • 在可能的情况下通过并行执行进行了性能优化