TriggerBinding
TriggerBinding — ключевой компонент в Tekton Triggers, который позволяет извлекать поля из полезной нагрузки события и связывать их с именованными параметрами. Эти параметры затем могут использоваться в TriggerTemplate для создания ресурсов, таких как TaskRuns и PipelineRuns, с конкретными значениями, извлечёнными из события.
Содержание
Объяснение терминологииЗачем нужен TriggerBindingПроблема событийно-ориентированных конвейеровКак TriggerBinding решает эти задачиПреимуществаПрименимые сценарииОграничения и лимитацииПринципыСтруктура и типы TriggerBindingПаттерны доступа к даннымПримеры конфигурацийПростой TriggerBinding для GitHub webhookПример с несколькими биндингамиВажные пояснения по параметрамВыражения JSONPathПрименимые сценарииОграничения и лимитацииПринципы/Пояснение параметровСправочные материалыОбъяснение терминологии
Зачем нужен TriggerBinding
Проблема событийно-ориентированных конвейеров
В CI/CD процессах внешние системы (например, GitHub, GitLab или другие провайдеры webhook) отправляют события с определёнными структурами данных. Эти события содержат ценную информацию, такую как идентификаторы коммитов, URL репозиториев, имена веток и другую метадату, которая должна использоваться при выполнении конвейера.
Без TriggerBindings не было бы стандартизированного способа:
- Извлекать конкретные поля из сложных полезных нагрузок событий
- Преобразовывать эти данные в параметры, которые могут использоваться конвейерами
- Обрабатывать различные структуры событий от разных систем
Как TriggerBinding решает эти задачи
TriggerBinding предоставляет декларативный способ:
- Извлекать конкретные поля из полезных нагрузок событий с помощью выражений JSONPath
- Преобразовывать эти поля в именованные параметры, к которым можно обращаться в TriggerTemplates
- Разделять ответственность между извлечением данных и созданием ресурсов
Это разделение позволяет командам создавать повторно используемые биндинги, которые можно комбинировать с разными шаблонами, делая процесс от события к конвейеру более модульным и удобным для поддержки.
Преимущества
- Повторное использование: Создавайте биндинги один раз и используйте их в нескольких триггерах
- Гибкость: Извлекайте данные как из HTTP-заголовков, так и из JSON-тела
- Варианты области действия: Используйте TriggerBindings на уровне namespace или ClusterTriggerBindings на уровне всего кластера
- Механизм резервного значения: Если поле не найдено, система может использовать значения по умолчанию из TriggerTemplate
- Композиция: Несколько биндингов можно комбинировать в одном Trigger для извлечения разных наборов данных
Применимые сценарии
TriggerBindings необходимы в следующих случаях:
-
Автоматизация CI/CD конвейеров: Автоматический запуск конвейеров при пуше кода в репозиторий с извлечением деталей коммита для использования в конвейере.
-
Многоокружные деплои: Использование одних и тех же данных события в сочетании с биндингами, специфичными для окружения, для деплоя в разные среды.
-
Обработка кастомных webhook: Извлечение релевантных данных из кастомных webhook для запуска соответствующих конвейеров с нужными параметрами.
-
Обработка сложных событий: При работе со сложными структурами событий, когда для выполнения конвейера нужны только определённые вложенные поля.
Ограничения и лимитации
- TriggerBindings могут извлекать только те данные, которые присутствуют в полезной нагрузке события
- Выражения JSONPath должны быть корректно отформатированы и обёрнуты в синтаксис
$() - Имена полей в HTTP-заголовках чувствительны к регистру
- Специальные символы в ключах JSON (например, точки или слэши) должны экранироваться обратными слэшами
Принципы
Структура и типы TriggerBinding
Существует три способа объявления TriggerBinding:
-
Встроенные биндинги: Определяются непосредственно внутри ресурса Trigger
-
Ресурс TriggerBinding: Создаётся как отдельный ресурс для повторного использования в нескольких Trigger
-
ClusterTriggerBinding: Биндинг с областью действия на уровне кластера для повторного использования во всём кластере
Паттерны доступа к данным
TriggerBindings используют выражения JSONPath, обёрнутые в синтаксис $(), для доступа к данным:
- Доступ к телу HTTP:
$(body.repository.url) - Доступ к HTTP-заголовкам:
$(header.Content-Type) - Доступ к данным интерцептора:
$(extensions.field-name) - Доступ к контексту EventListener:
$(context.eventID) - Обработка специальных символов:
$(body.dev\.tekton\.dev\/foo)
Примеры конфигураций
Простой TriggerBinding для GitHub webhook
Пример с несколькими биндингами
Важные пояснения по параметрам
Выражения JSONPath
Выражения JSONPath — основной механизм извлечения данных в TriggerBindings.
Применимые сценарии
- Извлечение вложенных полей из сложных JSON-структур
- Доступ к элементам массивов в полезной нагрузке
- Доступ к всему телу или заголовкам
Ограничения и лимитации
- Должны быть обёрнуты в синтаксис
$() - Вложенные обёртки
$()интерпретируются как внутреннее выражение - Некорректные выражения приводят к пустым значениям
Принципы/Пояснение параметров
Распространённые паттерны JSONPath: