创建 TriggerTemplate

TIP

有关 TriggerTemplate 的全面理解,包括其架构、优势和底层原理,请参阅TriggerTemplate 深入理解文档。

目录

概述

TriggerTemplate 是一种资源,用于定义资源的蓝图,这些资源可以在 EventListener 检测到事件时被实例化和执行,例如 TaskRun 或 PipelineRun。它提供参数化功能,允许你在资源模板中的任何位置使用这些参数。

支持的资源类型

TriggerTemplate 当前支持以下 Tekton Pipelines 资源:

建议:对以下资源使用 tekton.dev/v1tekton.dev/v1beta1 仍被接受,但已弃用,将在未来版本中移除。

资源类型描述
PipelinePipeline 定义
PipelineRunPipeline 运行实例
TaskTask 定义
TaskRunTask 运行实例

基本结构

以下是一个典型的 TriggerTemplate 定义示例:

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: pipeline-template
spec:
  params:                           # 参数定义
    - name: gitrevision            # 参数名称
      description: Git revision      # 参数描述
      default: main               # 默认值(可选)
    - name: gitrepositoryurl
      description: Git repository URL
    - name: message
      description: Print message
      default: This is the default message
  resourcetemplates:              # 资源模板定义
    - apiVersion: tekton.dev/v1
      kind: PipelineRun
      metadata:
        generateName: simple-pipeline-run-  # 生成名称前缀
      spec:
        pipelineRef:
          name: simple-pipeline
        params:
          - name: message
            value: $(tt.params.message)    # 使用模板参数
          - name: revision
            value: $(tt.params.gitrevision)

参数配置

1. 参数定义

spec.params 中定义参数:

spec:
  params:
    - name: param1                # 参数名称
      description: Parameter description # 参数描述
      default: Default value       # 可选默认值

2. 参数使用

在资源模板中使用参数:

  • 基本语法:$(tt.params.parameter_name)
  • 示例:$(tt.params.gitrevision)

3. 参数类型

TriggerTemplate 中的参数仅支持字符串类型值。每个参数包含以下字段:

  • name:参数名称(必填)
  • description:参数描述(可选)
  • default:默认值,必须是字符串(可选)
Note

注意:虽然参数值只能是字符串,但你可以在字符串中包含格式化内容(例如 JSON 字符串),并在使用时进行解析。

JSON 对象处理

传递 JSON 数据时,需要将其作为字符串处理:

# 在 TriggerTemplate 中定义参数
metadata:
  annotations: # 通过添加此配置允许将 JSON 格式化为字符串
    triggers.tekton.dev/old-escape-quotes: "true" # 
spec:
  params:
    - name: jsonData
      description: JSON formatted data (as a string)
      default: '{"key": "value"}'

# 在资源模板中使用
spec:
  params:
    - name: data
      value: $(tt.params.jsonData)  # 作为字符串传递

最佳实践

  1. 参数命名与组织

    • 使用清晰、描述性的参数名称
    • 为所有参数提供描述
    • 适当使用默认值
  2. 模板设计

    • 保持模板的可复用性
    • 使用动态名称生成
    • 适当拆分复杂模板
  3. 错误处理

    • 为关键参数提供默认值
    • 使用 CEL 拦截器验证参数
    • 实施适当的错误处理机制

常见问题

  1. 参数解析错误

    • 检查参数语法
    • 验证 JSON 对象格式
    • 确认参数名称匹配
  2. 资源创建失败

    • 检查资源模板格式
    • 验证参数值
    • 审查系统权限
  3. 命名冲突

    • 使用 generateName
    • 实施唯一性检查

使用示例

1. 基础 CI/CD Pipeline

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: ci-pipeline-template
spec:
  params:
    - name: git-revision
      description: Git commit SHA
    - name: git-repo-url
      description: Git repository URL
  resourcetemplates:
    - apiVersion: tekton.dev/v1
      kind: PipelineRun
      metadata:
        generateName: ci-run-
      spec:
        pipelineRef:
          name: ci-pipeline
        params:
          - name: revision
            value: $(tt.params.git-revision)
          - name: repo-url
            value: $(tt.params.git-repo-url)

2. 多环境部署

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: deploy-template
spec:
  params:
    - name: environment
      description: Deployment environment
      default: development
    - name: image-tag
      description: Image tag
  resourcetemplates:
    - apiVersion: tekton.dev/v1
      kind: PipelineRun
      metadata:
        generateName: deploy-$(tt.params.environment)-
      spec:
        pipelineRef:
          name: deploy-pipeline
        params:
          - name: target-environment
            value: $(tt.params.environment)
          - name: image-tag
            value: $(tt.params.image-tag)

参考链接