Использование 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: Автоматическое развертывание imagesСценарий использования 2: Применение политик безопасностиСценарий использования 3: Управление жизненным циклом артефактовСценарий использования 4: Многоэтапный CI/CD pipelineОбзор
Harbor Event Triggers позволяет автоматически запускать Tekton pipelines через Webhook-события Harbor. Поддерживаются несколько типов событий, включая push, pull, delete артефактов и завершение сканирования, что позволяет построить полный 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. В противном случае триггер завершится ошибкой при отсутствии поля. Например, если artifact-tag может отсутствовать, добавьте default: "" в определение параметра в вашем TriggerTemplate.
1. Событие Push Artifact
Срабатывает, когда артефакт (container image или OCI chart) загружается в репозиторий Harbor. Подходит для:
- Автоматической сборки и развертывания images
- Проверки и тестирования images
- Автоматического тегирования и версионирования
- Многоэтапных 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 по webhooks.
Руководство по настройке
Обработка необязательных полей
Некоторые поля в событиях Harbor могут быть необязательными или отсутствовать в зависимости от типа события или способа указания артефакта. Например:
artifact-tag: Может отсутствовать, если артефакт указан только по digestrepository-date-created: Доступно в событиях push и pull, но не в событиях delete и scanning
Важно: При использовании ClusterTriggerBindings, которые ссылаются на необязательные поля, вы обязаны указать значения по умолчанию в вашем TriggerTemplate для этих параметров. Если поле отсутствует в payload и значение по умолчанию не задано, триггер завершится ошибкой разбора JSONPath.
Пример: Чтобы обработать необязательное поле artifact-tag, настройте ваш TriggerTemplate следующим образом:
Это гарантирует, что если поле tag отсутствует в payload события Harbor, триггер использует пустую строку вместо ошибки.
Предварительные требования
- В окружении создан
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: (Optional) Настройте заголовок аутентификации, если это требуется.
- Skip Certificate Verification: Включите, если используются самоподписанные сертификаты.
- Name: Укажите понятное имя (например,
- Выберите нужные типы событий:
- Push Artifact: Срабатывает при загрузке артефактов
- Pull Artifact: Срабатывает при извлечении артефактов
- Delete Artifact: Срабатывает при удалении артефактов
- Scanning Completed: Срабатывает при завершении сканирования уязвимостей
- Нажмите Save.
Пример конфигурации Trigger pipeline
Если цель — реализовать непрерывную интеграцию через триггер со следующими требованиями:
- Автоматически запускать сборку и развертывание при загрузке image.
- Автоматически запускать проверки безопасности при завершении сканирования.
Фильтрация по типу события: Если ваш 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 для Push Artifact
Сохраните следующий YAML как harbor-push-trigger.yaml:
Создайте ресурс в окружении:
Пример фильтрации по типу события: Если ваш Harbor webhook настроен на отправку и Push, и Pull событий, и вы хотите обрабатывать их по-разному, вы можете создать отдельные Triggers с CEL interceptors для фильтрации по типу события:
Trigger для Push события (показан выше):
Trigger для Pull события (если необходимо):
Это гарантирует, что события push будут запускать только push pipeline, а события pull — только pull pipeline, даже если оба типа событий отправляются в один и тот же EventListener.
Создание Trigger для Scanning Completed
Сохраните следующий YAML как harbor-scanning-trigger.yaml:
При необходимости скорректируйте конфигурацию Interceptor. Вы можете фильтровать по статусу сканирования, уровню критичности уязвимостей и т. д. Обратите внимание, что структура scan_overview использует динамические ключи MIME type, поэтому вам может потребоваться скорректировать выражение JSONPath в зависимости от типа сканирования.
Создайте ресурс в окружении:
Проверка Trigger
Проверьте работу, загрузив image в Harbor и запустив сканирование уязвимостей.
CLI:
Вы можете получить статус выполнения pipeline с помощью kubectl -n <namespace> get pipelinerun.
Console:
Откройте Pipelines > PipelineRuns, чтобы просмотреть запущенные pipeline.
Сценарии использования
Сценарий использования 1: Автоматическое развертывание images
Сценарий: Автоматически развертывать container images в staging или production окружения при их загрузке в Harbor.
Конфигурация:
- Создать Trigger с использованием binding
harbor-push-artifact - Настроить pipeline на получение image через
artifact-resource-urlи развертывание его в целевом окружении - При необходимости фильтровать по namespace репозитория или шаблону тега с помощью CEL interceptors
Примеры использования:
- Развертывание images с тегом
productionв production окружение - Развертывание images из определенных namespaces в staging окружение
- Запуск развертывания только для images, соответствующих определенным шаблонам именования
Сценарий использования 2: Применение политик безопасности
Сценарий: Применять политики безопасности, блокируя развертывание images с критическими уязвимостями.
Конфигурация:
- Создать Trigger с использованием binding
harbor-scanning-completed - Использовать CEL interceptor для фильтрации сканирований с критическими уязвимостями
- Настроить pipeline, чтобы:
- Проверять количество уязвимостей по результатам сканирования
- Блокировать развертывание, если количество критических уязвимостей превышает порог
- Отправлять уведомления команде безопасности
Примеры использования:
- Запрещать развертывание images с критическими уязвимостями
- Автоматически помещать в карантин images с уязвимостями высокого риска
- Генерировать отчеты по безопасности для целей соответствия требованиям
Сценарий использования 3: Управление жизненным циклом артефактов
Сценарий: Автоматически управлять жизненным циклом артефактов на основе шаблонов использования и политик хранения.
Конфигурация:
- Создать Triggers для событий
harbor-pull-artifactиharbor-delete-artifact - Отслеживать использование и возраст артефактов
- Автоматически удалять старые или неиспользуемые артефакты на основе политик
Примеры использования:
- Архивировать старые артефакты, которые не извлекались в течение 90 дней
- Очищать артефакты разработки после развертывания в production
- Обеспечивать соответствие политикам хранения данных
Сценарий использования 4: Многоэтапный CI/CD pipeline
Сценарий: Построить полный CI/CD pipeline, который запускается при загрузке image, выполняет тесты, проводит сканирование безопасности и выполняет развертывание на основе результатов сканирования.
Конфигурация:
- Создать несколько Triggers:
- Trigger
harbor-push-artifact: запуск pipeline сборки и тестирования - Trigger
harbor-scanning-completed: продолжение развертывания, если сканирование прошло успешно
- Trigger
- Использовать зависимости pipeline и workspaces для обмена артефактами между этапами
Примеры использования:
- Workflow Build → Test → Scan → Deploy
- Параллельное тестирование и сканирование для более быстрой обратной связи
- Условное развертывание на основе результатов тестов и сканирования