Trigger
Trigger — это ключевой компонент в Tekton Triggers, который определяет, что происходит при обнаружении события EventListener. Он связывает данные события с выполнением pipeline, задавая, как входящие данные должны обрабатываться, извлекаться и использоваться для создания ресурсов Kubernetes.
Содержание
Объяснение терминологииЗачем нужен TriggerПроблема событийно-ориентированного CI/CDКак Trigger решает эти проблемыПреимуществаПрименимые сценарииОграничения и условияПринципыСтруктура TriggerКлючевые компоненты и их взаимосвязьПримеры конфигурацииTrigger для GitHub Pull RequestTrigger для GitLab Push EventВажные пояснения по параметрам, связанным с TriggerInterceptorsПрименимые сценарииОграничения и условияПринципы/пояснения параметровBindingsПрименимые сценарииПримеры конфигурацииСправочные материалыОбъяснение терминологии
Зачем нужен Trigger
Проблема событийно-ориентированного CI/CD
В традиционных CI/CD системах для связи внешних событий (например, push в Git или вызовы webhook) с выполнением pipeline требуется:
- Пользовательский интеграционный код для каждого источника событий
- Ручная настройка сопоставления данных события с параметрами pipeline
- Сложная логика определения, когда и как запускать конкретные pipeline
- Отдельная обработка для разных окружений и условий
Это приводит к:
- Жёсткой связке между источниками событий и выполнением pipeline
- Дублированию интеграционного кода в разных проектах
- Трудностям в сопровождении и развитии системы
- Ограниченной повторной используемости интеграционных шаблонов
Как Trigger решает эти проблемы
Tekton Trigger предоставляет декларативный, нативный для Kubernetes способ:
- Определять логику обработки событий: точно задавать, как должны обрабатываться события без написания кода
- Извлекать релевантные данные: использовать TriggerBindings для извлечения конкретных полей из полезной нагрузки событий
- Создавать необходимые ресурсы: применять TriggerTemplates для динамического создания нужных ресурсов на основе данных события
- Фильтровать и трансформировать события: использовать Interceptors для валидации, фильтрации и преобразования данных события перед обработкой
- Разделять обязанности: отделять приём событий от создания ресурсов для лучшей сопровождаемости
Такой подход позволяет построить полностью событийно-ориентированную CI/CD систему, которая автоматически реагирует на различные внешние события, сохраняя гибкость и повторную используемость.
Преимущества
- Декларативная конфигурация: определение связей событие-pipeline с помощью ресурсов Kubernetes
- Повторная используемость: создание переиспользуемых Trigger, применимых в разных проектах
- Гибкость: поддержка различных источников событий (GitHub, GitLab, универсальные webhook и др.)
- Расширяемость: возможность создания кастомных Interceptors для специализированной обработки событий
- Разделение обязанностей: чёткое разделение между приёмом событий, извлечением данных и созданием ресурсов
- Безопасность: встроенная поддержка валидации и фильтрации событий
- Нативность Kubernetes: бесшовная интеграция с экосистемой Kubernetes
Применимые сценарии
Trigger необходимы в следующих сценариях:
-
Автоматизированные CI/CD pipeline: автоматический запуск сборок и деплоев при push в репозиторий.
-
Мультиокружения: использование одних и тех же данных события для запуска разных pipeline в разных окружениях.
-
ChatOps: выполнение pipeline в ответ на комментарии в pull request или issue.
-
Плановые операции: сочетание с cron job для периодического запуска поддерживающих или тестовых pipeline.
-
Кросс-сервисные workflow: запуск pipeline при событиях в других системах (например, трекерах задач, системах мониторинга).
-
GitOps: автоматическое применение изменений конфигурации при обновлении Git-репозиториев.
Ограничения и условия
- Для работы Trigger требуется EventListener для приёма и обработки событий
- Каждый EventListener создаёт сервис Kubernetes, доступный для источников событий
- Сложная обработка событий может потребовать кастомных Interceptors
- Источники событий должны иметь возможность отправлять HTTP-запросы на EventListener
- Необходимо учитывать вопросы безопасности webhook (аутентификация, авторизация)
Принципы
Структура Trigger
Ресурс Trigger в Tekton имеет следующую структуру:
Ключевые компоненты и их взаимосвязь
-
Interceptors: обрабатывают входящие события до передачи в bindings и templates
- Фильтруют события по заданным критериям
- Преобразуют данные события
- Добавляют дополнительные данные в полезную нагрузку
- Проверяют подлинность события
-
Bindings: извлекают данные из полезной нагрузки события
- Могут ссылаться на существующие TriggerBindings или ClusterTriggerBindings
- Могут быть встроены непосредственно в Trigger
- Несколько bindings могут комбинироваться в одном Trigger
-
Template: определяет, какие ресурсы создавать
- Может ссылаться на существующие TriggerTemplates
- Может быть встроен непосредственно в Trigger
- Использует параметры, извлечённые bindings
-
ServiceAccount: предоставляет необходимые права для создания ресурсов
- Должен иметь разрешения на создание ресурсов, определённых в шаблоне
Примеры конфигурации
Trigger для GitHub Pull Request
Trigger для GitLab Push Event
На основе документации по событиям GitLab:
Важные пояснения по параметрам, связанным с Trigger
Interceptors
Interceptors — мощные компоненты, которые обрабатывают события до передачи в TriggerBindings и TriggerTemplates.
Применимые сценарии
- Проверка подписей webhook
- Фильтрация событий по заданным критериям
- Преобразование данных события
- Добавление дополнительного контекста к событиям
Ограничения и условия
- Каждый interceptor увеличивает время обработки события
- Сложная логика фильтрации может требовать выражений CEL
- Кастомные interceptors требуют дополнительного развертывания и управления
Принципы/пояснения параметров
Распространённые interceptors:
- GitHub: проверяет подписи webhook GitHub и фильтрует по типу события
- GitLab: проверяет подписи webhook GitLab и фильтрует по типу события
- BitBucket: проверяет подписи webhook BitBucket и фильтрует по типу события
- CEL: использует Common Expression Language для фильтрации и трансформации
- Webhook: проверяет подписи webhook с использованием секрета
Bindings
Поле bindings в Trigger задаёт, как извлекать данные из событий.
Применимые сценарии
- Извлечение информации о коммите Git
- Получение метаданных pull request или merge request
- Получение информации о репозитории
- Доступ к пользовательским заголовкам или полям полезной нагрузки