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