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