Использование Harbor Event Triggers
Содержание
ОбзорОсновные возможностиПоддерживаемые типы событийБазовая информация о событииБазовые переменные (общие для всех событий)1. Событие Push ArtifactПеременные события Push Artifact2. Событие Pull ArtifactПеременные события Pull Artifact3. Событие Delete ArtifactПеременные события Delete Artifact4. Событие Scanning CompletedПеременные события Scanning CompletedРуководство по настройкеОбработка необязательных полейПредварительные требованияНастройка Webhook через UI HarborПример конфигурации trigger pipelineСценарии использованияСценарий использования 1: Автоматическое развертывание образовСценарий использования 2: Применение политик безопасностиСценарий использования 3: Управление жизненным циклом артефактовСценарий использования 4: Многоэтапный CI/CD pipelineОбзор
Harbor Event Triggers позволяет автоматически запускать Tekton pipelines через Webhook-события Harbor. Он поддерживает несколько типов событий, включая отправку, получение, удаление артефактов и завершение сканирования, что позволяет построить полный workflow автоматизации CI/CD для container images и OCI charts.
Основные возможности
- Поддержка нескольких типов событий: поддерживает различные события Harbor, такие как Push Artifact, Pull Artifact, Delete Artifact и Scanning Completed.
- Стандартизированная привязка триггеров: предоставляет стандартизированные ClusterTriggerBindings для обеспечения一致ности между платформами.
- Гибкое сопоставление параметров: автоматически извлекает ключевую информацию из событий Harbor для параметров pipeline.
- Поддержка нескольких типов артефактов: поддерживает как container images, так и OCI charts.
Поддерживаемые типы событий
Базовая информация о событии
Все выходные переменные можно использовать для сопоставления параметров pipeline. Значения параметров можно получить с помощью $(tt.params.<param name>).
Базовые переменные (общие для всех событий)
Обработка необязательных полей: Поле artifact-tag является необязательным и может отсутствовать в payload, если артефакт указан только по digest. Поле repository-date-created доступно для событий push и pull, но недоступно для событий delete и scanning.
Важно: Если поле, на которое ссылается TriggerBinding, может отсутствовать в payload, вы обязательно должны задать значение default для этого параметра в TriggerTemplate. В противном случае при отсутствии поля trigger завершится ошибкой. Например, если поле artifact-tag может отсутствовать, добавьте default: "" в определение параметра в вашем TriggerTemplate.
1. Событие Push Artifact
Срабатывает, когда артефакт (container image или OCI chart) отправляется в репозиторий Harbor. Подходит для:
- Автоматической сборки и развертывания образов
- Валидации и тестирования образов
- Автоматической маркировки и версионирования
- Многоэтапных pipeline сборки
Переменные события Push Artifact
Также доступны все базовые переменные, перечисленные выше.
2. Событие Pull Artifact
Срабатывает, когда артефакт извлекается из репозитория Harbor. Подходит для:
- Отслеживания использования и аналитики
- Мониторинга безопасности
- Отслеживания потребления ресурсов
- Проверки развертывания
Переменные события Pull Artifact
Также доступны все базовые переменные, перечисленные выше.
3. Событие Delete Artifact
Срабатывает, когда артефакт удаляется из репозитория Harbor. Подходит для:
- Автоматизации очистки
- Журналирования аудита
- Управления ресурсами
- Отслеживания соответствия требованиям
Переменные события Delete Artifact
Доступны все базовые переменные, перечисленные выше. Обратите внимание, что repository-date-created недоступен для событий delete.
4. Событие Scanning Completed
Срабатывает, когда завершается сканирование уязвимостей артефакта. Подходит для:
- Применения политик безопасности
- Автоматических проверок безопасности
- Отчетности по уязвимостям
- Автоматизированных workflow устранения проблем
Переменные события Scanning Completed
Доступны все базовые переменные, перечисленные выше. Обратите внимание, что repository-date-created недоступен для событий scanning.
Структура поля scan_overview зависит от типа сканирования (SBOM, проверка уязвимостей). В структуре используются динамические ключи MIME type (например, application/vnd.security.vulnerability.report; version=1.1), которые нельзя напрямую разобрать с помощью JSONPath в TriggerBindings. Если вам нужно извлекать подробные результаты сканирования (например, количество уязвимостей, статус сканирования), рассмотрите возможность использования CEL interceptors или создания отдельных bindings для разных типов сканирования.
Дополнительные сведения о структуре событий см. в официальной документации Harbor по webhook.
Руководство по настройке
Обработка необязательных полей
Некоторые поля в событиях Harbor могут быть необязательными или отсутствовать в зависимости от типа события либо от того, как указан артефакт. Например:
artifact-tag: может отсутствовать, если артефакт указан только по digestrepository-date-created: доступно в событиях push и pull, но недоступно в событиях delete и scanning
Важно: При использовании ClusterTriggerBindings, которые ссылаются на необязательные поля, вы обязательно должны указывать значения по умолчанию в TriggerTemplate для этих параметров. Если поле отсутствует в payload и значение по умолчанию не задано, trigger завершится с ошибкой разбора JSONPath.
Пример: Чтобы обработать необязательное поле artifact-tag, настройте ваш TriggerTemplate следующим образом:
Это гарантирует, что если поле tag отсутствует в payload события Harbor, trigger использует пустую строку вместо завершения с ошибкой.
Предварительные требования
- В среде создан
EventListener, который может обрабатыватьTriggerв целевом namespace. За дополнительной информацией обратитесь к администратору платформы. - Harbor может обращаться к указанному выше
EventListener. - Создан необходимый
Pipeline, а также требуемые конфигурации запуска. - У вас есть права на изменение настроек Webhook проекта Harbor.
Настройка Webhook через UI Harbor
- Откройте настройки вашего проекта Harbor.
- Перейдите в раздел Webhooks.
- Нажмите New Webhook.
- Настройте webhook:
- Name: введите описательное имя, например
tekton-webhook - Endpoint URL: введите URL EventListener, например: или
- Auth Header: при необходимости настройте заголовок аутентификации.
- Skip Certificate Verification: включите, если используются self-signed certificates.
- Name: введите описательное имя, например
- Выберите нужные типы событий:
- Push Artifact: срабатывает при отправке артефактов
- Pull Artifact: срабатывает при извлечении артефактов
- Delete Artifact: срабатывает при удалении артефактов
- Scanning Completed: срабатывает при завершении сканирования уязвимостей
- Нажмите Save.
Пример конфигурации trigger pipeline
Если цель — реализовать continuous integration через trigger со следующими требованиями:
- Автоматически запускать сборку и развертывание при отправке образа.
- Автоматически запускать проверки безопасности после завершения сканирования.
Фильтрация по типу события: Если ваш Harbor webhook настроен на отправку нескольких типов событий (например, и Push Artifact, и Pull Artifact), вы обязательно должны настроить CEL interceptors в ваших Triggers для фильтрации событий по типу. Без interceptors все настроенные типы событий будут запускать один и тот же pipeline, что может привести к нежелательным выполнениями.
Например, если ваш webhook отправляет события PUSH_ARTIFACT и PULL_ARTIFACT в один и тот же EventListener, а у вас есть Trigger без interceptor, оба события будут запускать pipeline. Используйте interceptors, чтобы направлять разные типы событий в разные Triggers или pipelines.
Чтобы упростить эту документацию, предположим, что pipeline уже подготовлен со следующими параметрами:
Замените это на информацию о вашем реальном pipeline.
Далее нам нужно настроить только два приведенных ниже trigger:
Создание Trigger для Push Artifact
Сохраните следующий YAML как harbor-push-trigger.yaml:
Создайте ресурс в среде:
Пример фильтрации по типу события: Если ваш Harbor webhook настроен на отправку как событий Push, так и Pull, и вы хотите обрабатывать их по-разному, можно создать отдельные Triggers с CEL interceptors для фильтрации по типу события:
Trigger для Push event (показан выше):
Trigger для Pull event (при необходимости):
Это гарантирует, что события push будут запускать только push pipeline, а события pull — только pull pipeline, даже если оба типа событий отправляются в один и тот же EventListener.
Создание Trigger для Scanning Completed
Сохраните следующий YAML как harbor-scanning-trigger.yaml:
При необходимости скорректируйте конфигурацию Interceptor. Вы можете фильтровать по статусу сканирования, уровню критичности уязвимостей и т. д. Обратите внимание, что структура scan_overview использует динамические ключи MIME type, поэтому вам может потребоваться скорректировать выражение JSONPath в зависимости от типа сканирования.
Создайте ресурс в среде:
Проверка Trigger
Проверьте работу, отправив образ в Harbor и запустив сканирование на уязвимости.
CLI:
Вы можете получить статус выполнения pipeline с помощью kubectl -n <namespace> get pipelinerun.
Console:
Откройте Pipelines > PipelineRuns, чтобы просмотреть запущенные pipelines.
Сценарии использования
Сценарий использования 1: Автоматическое развертывание образов
Сценарий: автоматически развертывать container images в staging или production environments, когда они отправляются в Harbor.
Настройка:
- Создайте Trigger с использованием binding
harbor-push-artifact - Настройте pipeline на получение образа с использованием
artifact-resource-urlи его развертывание в целевой среде - При необходимости фильтруйте по namespace репозитория или шаблону tag с помощью CEL interceptors
Примеры использования:
- Развертывание образов с тегом
productionв production environment - Развертывание образов из определенных namespaces в staging environment
- Запуск развертывания только для образов, соответствующих определенным шаблонам именования
Сценарий использования 2: Применение политик безопасности
Сценарий: применять политики безопасности, блокируя развертывание образов с критическими уязвимостями.
Настройка:
- Создайте Trigger с использованием binding
harbor-scanning-completed - Используйте CEL interceptor для фильтрации сканов с критическими уязвимостями
- Настройте pipeline так, чтобы он:
- Проверял количество уязвимостей по результатам сканирования
- Блокировал развертывание, если количество критических уязвимостей превышает порог
- Отправлял уведомления команде безопасности
Примеры использования:
- Запрет развертывания образов с критическими уязвимостями
- Автоматический карантин образов с уязвимостями высокого риска
- Генерация отчетов по безопасности для целей соответствия требованиям
Сценарий использования 3: Управление жизненным циклом артефактов
Сценарий: автоматически управлять жизненным циклом артефактов на основе шаблонов использования и политик хранения.
Настройка:
- Создайте Triggers для событий
harbor-pull-artifactиharbor-delete-artifact - Отслеживайте использование и возраст артефактов
- Автоматически удаляйте старые или неиспользуемые артефакты в соответствии с политиками
Примеры использования:
- Архивация старых артефактов, которые не извлекались в течение 90 дней
- Очистка development артефактов после развертывания в production
- Соблюдение политик хранения данных
Сценарий использования 4: Многоэтапный CI/CD pipeline
Сценарий: построить полный CI/CD pipeline, который запускается при отправке образа, выполняет тесты, проводит сканирование безопасности и выполняет развертывание на основе результатов сканирования.
Настройка:
- Создайте несколько Triggers:
- Trigger
harbor-push-artifact: запуск pipeline сборки и тестирования - Trigger
harbor-scanning-completed: продолжение развертывания, если сканирование прошло успешно
- Trigger
- Используйте зависимости pipeline и workspaces для обмена артефактами между этапами
Примеры использования:
- Workflow сборка → тестирование → сканирование → развертывание
- Параллельное тестирование и сканирование для более быстрого получения обратной связи
- Условное развертывание на основе результатов тестов и сканирования