• Русский
  • Триггер

    Триггер является ключевым компонентом в Tekton Triggers, который указывает, что происходит, когда EventListener обнаруживает событие. Он связывает данные события с выполнением конвейера, определяя, как должны обрабатываться, извлекаться и использоваться входные данные для создания ресурсов Kubernetes.

    Объяснение терминологии

    ТерминОписание
    ТриггерРесурс Tekton, который определяет, что происходит, когда событие обнаруживается, связывая данные события с выполнением конвейера.
    TriggerBindingРесурс, который извлекает поля из полезных нагрузок событий и связывает их с именованными параметрами.
    TriggerTemplateРесурс, который указывает, какие ресурсы создавать (например, TaskRuns или PipelineRuns) при получении события.
    EventListenerСлужба Kubernetes, которая слушает события и обрабатывает их в соответствии с определенными триггерами.
    ПерехватчикНеобязательный компонент, который обрабатывает и фильтрует данные событий перед их передачей TriggerBindings и TriggerTemplates.

    Зачем нам нужен триггер

    Проблема событийно-ориентированного CI/CD

    В традиционных системах CI/CD связывание внешних событий (таких как Git push или вызовы webhook) с выполнением конвейера требует:

    • Индивидуального кода интеграции для каждого источника событий
    • Ручной настройки для сопоставления данных событий с параметрами конвейера
    • Сложной логики для определения, когда и как запускать конкретные конвейеры
    • Раздельной обработки для различных сред и условий

    Этот подход приводит к:

    • Плотной связи между источниками событий и выполнением конвейера
    • Дублированию кода интеграции по проектам
    • Сложностям в обслуживании и развитии системы
    • Ограниченной повторно используемости паттернов интеграции

    Как триггер решает эти проблемы

    Tekton Trigger предоставляет декларативный, нативный для Kubernetes способ:

    1. Определить логику обработки событий: Точно указать, как должны обрабатываться события без использования пользовательского кода
    2. Извлекать соответствующие данные: Использовать TriggerBindings для извлечения конкретных полей из полезных нагрузок событий
    3. Создавать соответствующие ресурсы: Использовать TriggerTemplates для динамического создания правильных ресурсов на основе данных событий
    4. Фильтровать и преобразовывать события: Применять перехватчики для проверки, фильтрации и преобразования данных событий перед обработкой
    5. Разделять задачи: Разъединить получение событий от создания ресурсов для лучшей поддерживаемости

    Этот подход позволяет создать полностью событийно-ориентированную систему CI/CD, которая может автоматически реагировать на различные внешние события, сохраняя при этом гибкость и повторную используемость.

    Преимущества

    • Декларативная конфигурация: Определение связей между событиями и конвейерами с использованием ресурсов Kubernetes
    • Повторная используемость: Создание повторно используемых триггеров, которые могут быть применены в нескольких проектах
    • Гибкость: Поддержка различных источников событий (GitHub, GitLab, общие вебхуки и т. д.)
    • Расширяемость: Возможность создания пользовательских перехватчиков для специализированной обработки событий
    • Разделение задач: Четкое разделение между получением событий, извлечением данных и созданием ресурсов
    • Безопасность: Встроенная поддержка проверки и фильтрации событий
    • Нативный для Kubernetes: Бесшовная интеграция с экосистемой Kubernetes

    Применимые сценарии

    Триггеры необходимы в следующих сценариях:

    1. Автоматизированные CI/CD конвейеры: Автоматический запуск сборок и развертываний при отправке кода в репозиторий.

    2. Многообразные развертывания: Использование одних и тех же данных событий, но запуск различных конвейеров для разных сред.

    3. ChatOps: Выполнение конвейеров в ответ на комментарии в запросах на слияние или в проблемах.

    4. Запланированные операции: Совмещение с cron-заданиями для запуска периодического технического обслуживания или тестирования конвейеров.

    5. Межсервисные рабочие процессы: Запуск конвейеров при возникновении событий в других системах (например, трекерах ошибок, системах мониторинга).

    6. GitOps: Автоматическое применение изменений конфигурации при обновлении репозиториев Git.

    Ограничения и ограничения

    • Триггеры требуют EventListener для получения и обработки событий
    • Каждый EventListener создаёт службу Kubernetes, которая должна быть доступна для источников событий
    • Сложная обработка событий может потребовать пользовательских перехватчиков
    • Источники событий должны иметь возможность отправлять HTTP-запросы на EventListener
    • Необходимо учитывать аспекты безопасности вебхуков (аутентификация, авторизация)

    Принципы

    Структура триггера

    Ресурс триггера в Tekton имеет следующую структуру:

    apiVersion: triggers.tekton.dev/v1beta1
    kind: Trigger
    metadata:
      name: trigger-name
    spec:
      # Необязательный: обрабатывать и фильтровать события
      interceptors:
        - ref:
            name: "interceptor-name"
          params:
            - name: "param-name"
              value: "param-value"
    
      # Извлекать данные из событий
      bindings:
        - ref: binding-name  # Ссылка на существующий TriggerBinding
        # Или встроить связывание напрямую
        - name: param-name
          value: $(body.field.path)
    
      # Указывать ресурсы для создания
      template:
        ref: template-name  # Ссылка на существующий TriggerTemplate
        # Или встроить шаблон напрямую
        # spec: ...
    
      # Необязательный: ServiceAccount для создания ресурсов
      serviceAccountName: service-account-name

    Ключевые компоненты и их взаимосвязи

    1. Перехватчики: Обрабатывают входящие события до их достижения привязок и шаблонов

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

      • Могут ссылаться на существующие TriggerBindings или ClusterTriggerBindings
      • Могут быть встроены непосредственно в триггер
      • Несколько привязок могут быть объединены в одном триггере
    3. Шаблон: Определяет, какие ресурсы необходимо создать

      • Могут ссылаться на существующие TriggerTemplates
      • Могут быть встроены непосредственно в триггер
      • Используют параметры, извлеченные привязками
    4. ServiceAccount: Предоставляет необходимые права для создания ресурсов

      • Должен иметь разрешения на создание ресурсов, определенных в шаблоне

    Примеры конфигурации

    Триггер запроса на слияние GitHub

    apiVersion: triggers.tekton.dev/v1beta1
    kind: Trigger
    metadata:
      name: github-pull-request-trigger
    spec:
      interceptors:
        - ref:
            name: "github"
          params:
            - name: "eventTypes"
              value: ["pull_request"]
        - ref:
            name: "cel"
          params:
            - name: "filter"
              value: "body.action in ['opened', 'synchronize', 'reopened']"
            - name: "overlays"
              value:
                - key: truncated_sha
                  expression: "body.pull_request.head.sha.truncate(7)"
      bindings:
        - name: git-revision
          value: $(body.pull_request.head.sha)
        - name: git-repository-url
          value: $(body.repository.clone_url)
        - name: pull-request-number
          value: $(body.number)
      template:
        ref: pull-request-template

    Триггер события Push GitLab

    На основании документации событий GitLab:

    apiVersion: triggers.tekton.dev/v1beta1
    kind: Trigger
    metadata:
      name: gitlab-push-trigger
    spec:
      interceptors:
        - ref:
            name: "gitlab"
          params:
            - name: "eventTypes"
              value: ["Push Hook"]
      bindings:
        - name: git-revision
          value: $(body.checkout_sha)
        - name: git-repository-url
          value: $(body.project.git_http_url)
        - name: git-repo-name
          value: $(body.project.name)
        - name: git-commit-message
          value: $(body.commits[0].message)
      template:
        ref: gitlab-ci-template

    Важные объяснения параметров, относящихся к триггеру

    Перехватчики

    Перехватчики являются мощными компонентами, которые обрабатывают события до их достижения TriggerBindings и TriggerTemplates.

    Применимые сценарии

    • Проверка подписей webhook
    • Фильтрация событий на основе определенных критериев
    • Преобразование данных событий
    • Добавление дополнительного контекста к событиям

    Ограничения и ограничения

    • Каждый перехватчик добавляет время обработки к обработке событий
    • Сложная логика фильтрации может потребовать выражений CEL
    • Пользовательские перехватчики требуют дополнительного развертывания и управления

    Принципы/объяснение параметра

    Распространенные перехватчики включают:

    • GitHub: Проверяет подписи webhook GitHub и фильтрует по типу события
    • GitLab: Проверяет подписи webhook GitLab и фильтрует по типу события
    • BitBucket: Проверяет подписи webhook BitBucket и фильтрует по типу события
    • CEL: Использует Общий Язык Выражений для фильтрации и преобразования
    • Webhook: Проверяет подписи webhook с использованием секрета

    Привязки

    Поле привязки в триггере указывает, как извлекать данные из событий.

    Применимые сценарии

    • Извлечение информации о коммитах Git
    • Сбор метаданных о запросах на слияние или запросах на объединение
    • Получение информации о репозитории
    • Доступ к пользовательским заголовкам или полям полезной нагрузки

    Примеры конфигурации

    bindings:
      # Ссылка на существующий TriggerBinding
      - ref: common-git-binding
    
      # Встроить привязку напрямую
      - name: custom-field
        value: $(body.custom.field)
    
      # Ссылка на ClusterTriggerBinding
      - ref: cluster-git-binding
        kind: ClusterTriggerBinding

    Справочные материалы