• Русский
  • Create TriggerTemplate

    TIP

    Для полного понимания TriggerTemplates, включая их архитектуру, преимущества и основные принципы, смотрите документ In-Depth Understanding of TriggerTemplate.

    Overview

    TriggerTemplate — это ресурс, используемый для определения шаблона ресурсов, которые могут быть созданы и выполнены, таких как TaskRun или PipelineRun, когда EventListener обнаруживает событие. Он предоставляет возможности параметризации, позволяя использовать эти параметры в любом месте внутри шаблона ресурса.

    Supported Resource Types

    В настоящее время TriggerTemplate поддерживает следующие ресурсы Tekton Pipelines:

    Рекомендация: используйте tekton.dev/v1 для следующих ресурсов; tekton.dev/v1beta1 по-прежнему принимается, но устарел и будет удалён в будущих релизах.

    Resource TypeDescription
    PipelineОпределение Pipeline
    PipelineRunЭкземпляр запуска Pipeline
    TaskОпределение Task
    TaskRunЭкземпляр запуска Task

    Basic Structure

    Ниже приведён типичный пример определения 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)

    Parameter Configuration

    1. Parameter Definition

    Определите параметры в spec.params:

    spec:
      params:
        - name: param1                # Имя параметра
          description: Parameter description # Описание параметра
          default: Default value       # Опциональное значение по умолчанию

    2. Parameter Usage

    Используйте параметры внутри шаблона ресурса:

    • Базовый синтаксис: $(tt.params.parameter_name)
    • Пример: $(tt.params.gitrevision)

    3. Parameter Types

    Параметры в TriggerTemplate поддерживают только строковые значения. Каждый параметр включает следующие поля:

    • name: имя параметра (обязательно)
    • description: описание параметра (опционально)
    • default: значение по умолчанию, должно быть строкой (опционально)
    NOTE

    Примечание: хотя значения параметров могут быть только строками, вы можете включать форматированный контент (например, JSON-строки) внутри строки и разбирать его при использовании.

    JSON Object Handling

    При передаче 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)  # Передаётся как строка

    Best Practices

    1. Именование и организация параметров

      • Используйте понятные, описательные имена параметров
      • Предоставляйте описания для всех параметров
      • Используйте значения по умолчанию там, где это уместно
    2. Проектирование шаблонов

      • Делайте шаблоны переиспользуемыми
      • Используйте динамическую генерацию имён
      • Разбивайте сложные шаблоны на части
    3. Обработка ошибок

      • Предоставляйте значения по умолчанию для критичных параметров
      • Используйте CEL interceptor для валидации параметров
      • Реализуйте соответствующие механизмы обработки ошибок

    Frequently Asked Questions

    1. Ошибки парсинга параметров

      • Проверьте синтаксис параметров
      • Проверьте формат JSON-объекта
      • Убедитесь, что имя параметра совпадает
    2. Сбои при создании ресурсов

      • Проверьте формат шаблона ресурса
      • Проверьте значения параметров
      • Проверьте системные разрешения
    3. Конфликты имён

      • Используйте generateName
      • Реализуйте проверки уникальности

    Usage Examples

    1. Basic 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. Multi-Environment Deployment

    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)