创建 TriggerTemplate

TIP

有关 TriggerTemplates 的全面理解,包括其架构、优势和基本原理,请参见 深入理解 TriggerTemplate 文档。

概述

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

支持的资源类型

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

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

基本结构

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

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: pipeline-template
spec:
  params:                           # 参数定义
    - name: gitrevision            # 参数名称
      description: Git 修订版本      # 参数描述
      default: main                 # 默认值(可选)
    - name: gitrepositoryurl
      description: Git 仓库 URL
    - name: message
      description: 打印消息
      default: 这是默认消息
  resourcetemplates:              # 资源模板定义
    - apiVersion: tekton.dev/v1beta1
      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: 参数描述        # 参数描述
      default: 默认值             # 可选默认值

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 格式数据(作为字符串)
      default: '{"key": "value"}'

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

最佳实践

  1. 参数命名与组织

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

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

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

常见问题

  1. 参数解析错误

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

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

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

使用示例

1. 基本 CI/CD 管道

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: ci-pipeline-template
spec:
  params:
    - name: git-revision
      description: Git 提交 SHA
    - name: git-repo-url
      description: Git 仓库 URL
  resourcetemplates:
    - apiVersion: tekton.dev/v1beta1
      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: 部署环境
      default: development
    - name: image-tag
      description: 镜像标签
  resourcetemplates:
    - apiVersion: tekton.dev/v1beta1
      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)

参考链接