Триггер
Триггер является ключевым компонентом в Tekton Triggers, который указывает, что происходит, когда EventListener обнаруживает событие. Он связывает данные события с выполнением конвейера, определяя, как должны обрабатываться, извлекаться и использоваться входные данные для создания ресурсов Kubernetes.
Содержание
Объяснение терминологииЗачем нам нужен триггерПроблема событийно-ориентированного CI/CDКак триггер решает эти проблемыПреимуществаПрименимые сценарииОграничения и ограниченияПринципыСтруктура триггераКлючевые компоненты и их взаимосвязиПримеры конфигурацииТриггер запроса на слияние GitHubТриггер события Push GitLabВажные объяснения параметров, относящихся к триггеруПерехватчикиПрименимые сценарииОграничения и ограниченияПринципы/объяснение параметраПривязкиПрименимые сценарииПримеры конфигурацииСправочные материалыОбъяснение терминологии
Зачем нам нужен триггер
Проблема событийно-ориентированного CI/CD
В традиционных системах CI/CD связывание внешних событий (таких как Git push или вызовы webhook) с выполнением конвейера требует:
- Индивидуального кода интеграции для каждого источника событий
- Ручной настройки для сопоставления данных событий с параметрами конвейера
- Сложной логики для определения, когда и как запускать конкретные конвейеры
- Раздельной обработки для различных сред и условий
Этот подход приводит к:
- Плотной связи между источниками событий и выполнением конвейера
- Дублированию кода интеграции по проектам
- Сложностям в обслуживании и развитии системы
- Ограниченной повторно используемости паттернов интеграции
Как триггер решает эти проблемы
Tekton Trigger предоставляет декларативный, нативный для Kubernetes способ:
- Определить логику обработки событий: Точно указать, как должны обрабатываться события без использования пользовательского кода
- Извлекать соответствующие данные: Использовать TriggerBindings для извлечения конкретных полей из полезных нагрузок событий
- Создавать соответствующие ресурсы: Использовать TriggerTemplates для динамического создания правильных ресурсов на основе данных событий
- Фильтровать и преобразовывать события: Применять перехватчики для проверки, фильтрации и преобразования данных событий перед обработкой
- Разделять задачи: Разъединить получение событий от создания ресурсов для лучшей поддерживаемости
Этот подход позволяет создать полностью событийно-ориентированную систему CI/CD, которая может автоматически реагировать на различные внешние события, сохраняя при этом гибкость и повторную используемость.
Преимущества
- Декларативная конфигурация: Определение связей между событиями и конвейерами с использованием ресурсов Kubernetes
- Повторная используемость: Создание повторно используемых триггеров, которые могут быть применены в нескольких проектах
- Гибкость: Поддержка различных источников событий (GitHub, GitLab, общие вебхуки и т. д.)
- Расширяемость: Возможность создания пользовательских перехватчиков для специализированной обработки событий
- Разделение задач: Четкое разделение между получением событий, извлечением данных и созданием ресурсов
- Безопасность: Встроенная поддержка проверки и фильтрации событий
- Нативный для Kubernetes: Бесшовная интеграция с экосистемой Kubernetes
Применимые сценарии
Триггеры необходимы в следующих сценариях:
-
Автоматизированные CI/CD конвейеры: Автоматический запуск сборок и развертываний при отправке кода в репозиторий.
-
Многообразные развертывания: Использование одних и тех же данных событий, но запуск различных конвейеров для разных сред.
-
ChatOps: Выполнение конвейеров в ответ на комментарии в запросах на слияние или в проблемах.
-
Запланированные операции: Совмещение с cron-заданиями для запуска периодического технического обслуживания или тестирования конвейеров.
-
Межсервисные рабочие процессы: Запуск конвейеров при возникновении событий в других системах (например, трекерах ошибок, системах мониторинга).
-
GitOps: Автоматическое применение изменений конфигурации при обновлении репозиториев Git.
Ограничения и ограничения
- Триггеры требуют EventListener для получения и обработки событий
- Каждый EventListener создаёт службу Kubernetes, которая должна быть доступна для источников событий
- Сложная обработка событий может потребовать пользовательских перехватчиков
- Источники событий должны иметь возможность отправлять HTTP-запросы на EventListener
- Необходимо учитывать аспекты безопасности вебхуков (аутентификация, авторизация)
Принципы
Структура триггера
Ресурс триггера в Tekton имеет следующую структуру:
Ключевые компоненты и их взаимосвязи
-
Перехватчики: Обрабатывают входящие события до их достижения привязок и шаблонов
- Фильтруют события по определенным критериям
- Преобразуют данные события
- Добавляют дополнительные данные в полезную нагрузку события
- Проверяют подлинность события
-
Привязки: Извлекают данные из полезных нагрузок событий
- Могут ссылаться на существующие TriggerBindings или ClusterTriggerBindings
- Могут быть встроены непосредственно в триггер
- Несколько привязок могут быть объединены в одном триггере
-
Шаблон: Определяет, какие ресурсы необходимо создать
- Могут ссылаться на существующие TriggerTemplates
- Могут быть встроены непосредственно в триггер
- Используют параметры, извлеченные привязками
-
ServiceAccount: Предоставляет необходимые права для создания ресурсов
- Должен иметь разрешения на создание ресурсов, определенных в шаблоне
Примеры конфигурации
Триггер запроса на слияние GitHub
Триггер события Push GitLab
На основании документации событий GitLab:
Важные объяснения параметров, относящихся к триггеру
Перехватчики
Перехватчики являются мощными компонентами, которые обрабатывают события до их достижения TriggerBindings и TriggerTemplates.
Применимые сценарии
- Проверка подписей webhook
- Фильтрация событий на основе определенных критериев
- Преобразование данных событий
- Добавление дополнительного контекста к событиям
Ограничения и ограничения
- Каждый перехватчик добавляет время обработки к обработке событий
- Сложная логика фильтрации может потребовать выражений CEL
- Пользовательские перехватчики требуют дополнительного развертывания и управления
Принципы/объяснение параметра
Распространенные перехватчики включают:
- GitHub: Проверяет подписи webhook GitHub и фильтрует по типу события
- GitLab: Проверяет подписи webhook GitLab и фильтрует по типу события
- BitBucket: Проверяет подписи webhook BitBucket и фильтрует по типу события
- CEL: Использует Общий Язык Выражений для фильтрации и преобразования
- Webhook: Проверяет подписи webhook с использованием секрета
Привязки
Поле привязки в триггере указывает, как извлекать данные из событий.
Применимые сценарии
- Извлечение информации о коммитах Git
- Сбор метаданных о запросах на слияние или запросах на объединение
- Получение информации о репозитории
- Доступ к пользовательским заголовкам или полям полезной нагрузки