TriggerTemplate
TriggerTemplate — это мощный компонент в Tekton Triggers, который определяет шаблон для ресурсов, которые должны быть созданы при обнаружении события. Он выступает в роли действия в event-driven pipeline, точно указывая, какие ресурсы Kubernetes (обычно TaskRuns или PipelineRuns) должны быть созданы в ответ на события.
Содержание
Объяснение терминологииЗачем нужен TriggerTemplateПроблема динамического создания ресурсов на основе событийКак TriggerTemplate решает эти задачиПреимуществаПрименимые сценарииОграничения и лимитыПринципыСтруктура TriggerTemplateОбработка параметровСоздание шаблонов ресурсовПримеры конфигурацийПростой шаблон CI pipelineШаблон для развёртывания в нескольких средахШаблон с несколькими ресурсамиВажные пояснения по параметрам, связанным с TriggerTemplateПодстановка параметровПрименимые сценарииОграничения и лимитыПринципы/объяснение параметровРабота с JSONПрименимые сценарииОграничения и лимитыПринципы/объяснение параметровРеференсные материалыОбъяснение терминологии
Зачем нужен TriggerTemplate
Проблема динамического создания ресурсов на основе событий
В CI/CD системах, реагирующих на внешние события, возникают следующие задачи при создании ресурсов:
- Динамическое создание ресурсов: Ресурсы, такие как pipeline, должны создаваться с информацией, специфичной для каждого события.
- Параметризация: Для разных событий необходимо передавать разные параметры в pipeline.
- Повторное использование: Один и тот же шаблон создания ресурсов часто нужно использовать для разных событий.
- Шаблонизация: Ручное создание ресурсов для каждого типа события подвержено ошибкам и не масштабируется.
Без TriggerTemplates решение этих задач потребовало бы:
- Пользовательских скриптов для генерации ресурсов Kubernetes для каждого события
- Сложной логики подстановки параметров
- Дублирования определений ресурсов в разных обработчиках событий
- Ручной синхронизации между данными события и созданием ресурсов
Как TriggerTemplate решает эти задачи
TriggerTemplate предоставляет декларативный, нативный для Kubernetes способ:
- Определять шаблоны ресурсов: Точно указывать, какие ресурсы создавать при возникновении событий.
- Параметризовать ресурсы: Использовать параметры, извлечённые из событий, для настройки ресурсов.
- Обеспечивать согласованность: Создавать ресурсы с одинаковой структурой для похожих событий.
- Разделять обязанности: Разделять обнаружение событий (EventListener) и извлечение данных (TriggerBinding) от создания ресурсов.
- Обеспечивать повторное использование: Определять шаблоны один раз и использовать их в нескольких триггерах.
Такой подход создаёт чистый декларативный способ определения действий при обнаружении событий, делая вашу CI/CD систему более поддерживаемой и масштабируемой.
Преимущества
- Декларативное определение: Определение создаваемых ресурсов с помощью нативного YAML Kubernetes
- Параметризация: Динамическая настройка ресурсов с помощью данных событий
- Повторное использование: Создание шаблонов один раз и использование их в нескольких триггерах
- Разделение обязанностей: Чёткое разделение между обнаружением событий, извлечением данных и созданием ресурсов
- Значения по умолчанию: Возможность задавать запасные значения параметров, которые могут отсутствовать в событиях
- Динамическое именование: Генерация ресурсов с уникальными именами для предотвращения конфликтов
- Несколько ресурсов: Создание нескольких ресурсов из одного события
- Валидация ресурсов: Проверка ресурсов во время выполнения перед созданием
Применимые сценарии
TriggerTemplates необходимы в следующих случаях:
- Автоматизированные CI/CD пайплайны: Автоматическое создание pipeline run при пуше кода или открытии pull request.
- Развёртывания в нескольких средах: Использование одного шаблона с разными параметрами для развёртывания в разных окружениях.
- Event-driven workflows: Создание ресурсов в ответ на события внешних систем, например, обновления задач или оповещения мониторинга.
- Динамическое создание ресурсов: Генерация ресурсов с параметрами, специфичными для каждого события, например, ID коммита или имя ветки.
- Параметризованное тестирование: Создание тестовых pipeline с разными параметрами в зависимости от типа события.
Ограничения и лимиты
- Параметры в TriggerTemplates могут быть только строковыми значениями
- JSON объекты требуют аккуратного обращения при использовании в параметрах
- Валидация ресурсов происходит во время выполнения, а не при создании
- Стандартные права сервисного аккаунта могут потребовать расширения для ресурсов вне Tekton
- Встроенные ресурсы должны быть включены в PipelineRun или TaskRun, которые их используют
- Имена параметров с числовыми префиксами требуют особой обработки
Принципы
Структура TriggerTemplate
TriggerTemplate состоит из двух основных разделов:
- Определение параметров: Объявляет параметры, которые могут использоваться в шаблонах ресурсов
- Шаблоны ресурсов: Определяет ресурсы Kubernetes, которые будут созданы
Обработка параметров
Параметры в TriggerTemplates подчиняются следующим правилам:
- Объявление: Параметры должны быть объявлены в разделе
paramsс указанием имени и опционально описания и значения по умолчанию. - Ссылка: Параметры используются в шаблонах ресурсов с помощью синтаксиса
$(tt.params.parameter-name). - Значения по умолчанию: Если параметр не передан через TriggerBinding, используется значение по умолчанию, если оно задано.
- Строковые значения: Все значения параметров рассматриваются как строки, даже если они представляют числа или JSON объекты.
- Специальные символы: Параметры с числовыми префиксами или специальными символами могут требовать кавычек в шаблонах ресурсов.
Создание шаблонов ресурсов
При обнаружении и обработке события:
- EventListener получает событие
- Interceptors обрабатывают и фильтруют событие (если настроены)
- TriggerBindings извлекают данные из события
- TriggerTemplate получает извлечённые параметры
- Выполняется подстановка параметров в шаблонах ресурсов
- Создаются ресурсы Kubernetes с подставленными значениями
Каждому созданному ресурсу добавляются метки для отслеживания происхождения:
tekton.dev/eventlistener: <EventListenerName>tekton.dev/triggers-eventid: <EventID>
Примеры конфигураций
Простой шаблон CI pipeline
Шаблон для развёртывания в нескольких средах
Шаблон с несколькими ресурсами
Важные пояснения по параметрам, связанным с TriggerTemplate
Подстановка параметров
Подстановка параметров — это основной механизм, делающий TriggerTemplates динамичными и переиспользуемыми.
Применимые сценарии
- Вставка SHA коммитов в PipelineRuns
- Использование URL репозиториев и имён веток в параметрах pipeline
- Передача метаданных событий в pipeline
- Кастомизация имён ресурсов с учётом информации о событии
Ограничения и лимиты
- Поддерживаются только строковые значения
- JSON объекты требуют специальной обработки
- Параметры с числовыми префиксами могут требовать кавычек
Принципы/объяснение параметров
Синтаксис подстановки параметров: $(tt.params.parameter-name), где parameter-name — имя параметра, объявленного в разделе params TriggerTemplate.
Пример:
Работа с JSON
При работе с JSON данными в TriggerTemplates требуются особые меры.
Применимые сценарии
- Передача сложных структур данных в pipeline
- Работа с полезной нагрузкой webhook, содержащей вложенный JSON
- Создание ресурсов, требующих JSON конфигурации
Ограничения и лимиты
- JSON объекты должны обрабатываться как строки
- Экранирование кавычек может быть сложным
- Для устаревших шаблонов могут потребоваться специальные аннотации
Принципы/объяснение параметров
Для работы с JSON объектами:
- Не заключайте JSON параметры в кавычки при использовании в шаблонах ресурсов
- Для устаревших шаблонов, требующих экранированных кавычек, добавьте аннотацию: