Использование триггеров событий Harbor
Содержание
OverviewCore FeaturesSupported Event TypesBasic Event InformationBasic Variables (Общие для всех событий)1. Push Artifact EventПеременные события Push Artifact2. Pull Artifact EventПеременные события Pull Artifact3. Delete Artifact EventПеременные события Delete Artifact4. Scanning Completed EventПеременные события Scanning CompletedConfiguration GuideОбработка опциональных полейПредварительные требованияНастройка Webhook через UI HarborПример настройки триггера PipelineUse CasesСценарий 1: Автоматический деплой образовСценарий 2: Применение политики безопасностиСценарий 3: Управление жизненным циклом артефактовСценарий 4: Многоступенчатый CI/CD pipelineOverview
Harbor Event Triggers позволяет автоматически запускать Tekton pipelines через Webhook-события Harbor. Поддерживаются различные типы событий, включая push, pull, delete артефактов и завершение сканирования, что позволяет построить полноценный CI/CD workflow для контейнерных образов и OCI charts.
Core Features
- Поддержка нескольких типов событий: Поддерживаются различные события Harbor, такие как Push Artifact, Pull Artifact, Delete Artifact и Scanning Completed.
- Стандартизированное связывание триггеров: Предоставляются стандартизированные ClusterTriggerBindings для обеспечения согласованности между платформами.
- Гибкое отображение параметров: Автоматически извлекает ключевую информацию из событий Harbor для параметров pipeline.
- Поддержка нескольких типов артефактов: Поддерживаются как контейнерные образы, так и OCI charts.
Supported Event Types
Basic Event Information
Все выходные переменные могут использоваться для отображения параметров pipeline. Значения параметров доступны через $(tt.params.<param name>).
Basic Variables (Общие для всех событий)
Обработка опциональных полей: Поле artifact-tag является опциональным и может отсутствовать в payload, если артефакт указан только по digest. Поле repository-date-created доступно для событий push и pull, но отсутствует в событиях delete и scanning.
Важно: Если поле, на которое ссылается TriggerBinding, может отсутствовать в payload, вы обязаны задать значение default для соответствующего параметра в TriggerTemplate. Иначе триггер завершится ошибкой при отсутствии поля. Например, если artifact-tag может отсутствовать, добавьте default: "" в определение параметра в TriggerTemplate.
1. Push Artifact Event
Срабатывает при push артефакта (контейнерного образа или OCI chart) в репозиторий Harbor. Подходит для:
- Автоматической сборки и деплоя образов
- Валидации и тестирования образов
- Автоматического тегирования и версионирования
- Многоступенчатых build pipeline
Переменные события Push Artifact
Все базовые переменные, перечисленные выше, также доступны.
2. Pull Artifact Event
Срабатывает при pull артефакта из репозитория Harbor. Подходит для:
- Отслеживания использования и аналитики
- Мониторинга безопасности
- Отслеживания потребления ресурсов
- Проверки деплоя
Переменные события Pull Artifact
Все базовые переменные, перечисленные выше, также доступны.
3. Delete Artifact Event
Срабатывает при удалении артефакта из репозитория Harbor. Подходит для:
- Автоматизации очистки
- Аудит логирования
- Управления ресурсами
- Отслеживания соответствия требованиям
Переменные события Delete Artifact
Все базовые переменные, перечисленные выше, доступны. Обратите внимание, что repository-date-created недоступно для событий удаления.
4. Scanning Completed Event
Срабатывает при завершении сканирования уязвимостей артефакта. Подходит для:
- Применения политик безопасности
- Автоматических проверок безопасности
- Отчётности по уязвимостям
- Автоматизации процессов исправления
Переменные события Scanning Completed
Все базовые переменные, перечисленные выше, доступны. Обратите внимание, что repository-date-created недоступно для событий сканирования.
Структура поля scan_overview варьируется в зависимости от типа сканирования (SBOM, проверка уязвимостей). Структура использует динамические MIME-типы в ключах (например, application/vnd.security.vulnerability.report; version=1.1), которые нельзя напрямую парсить с помощью JSONPath в TriggerBindings. Если необходимо извлечь подробные результаты сканирования (например, количество уязвимостей, статус сканирования), рассмотрите использование CEL interceptors или создание отдельных binding для разных типов сканирования.
Подробности о структуре событий можно найти в официальной документации Harbor по webhook.
Configuration Guide
Обработка опциональных полей
Некоторые поля в событиях 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: (Опционально) Настройте заголовок аутентификации, если требуется.
- Skip Certificate Verification: Включите, если используется самоподписанный сертификат.
- Name: Введите описательное имя (например,
- Выберите необходимые типы событий:
- Push Artifact: срабатывает при push артефактов
- Pull Artifact: срабатывает при pull артефактов
- Delete Artifact: срабатывает при удалении артефактов
- Scanning Completed: срабатывает при завершении сканирования уязвимостей
- Нажмите Save.
Пример настройки триггера Pipeline
Если цель — реализовать непрерывную интеграцию через триггер с такими требованиями:
- Автоматический запуск сборки и деплоя при push образа
- Автоматический запуск проверок безопасности при завершении сканирования
Фильтрация по типу события: Если webhook Harbor настроен на отправку нескольких типов событий (например, Push Artifact и Pull Artifact), вы обязаны настроить CEL interceptors в ваших Trigger для фильтрации событий по типу. Без interceptors все настроенные типы событий будут запускать один и тот же pipeline, что может привести к нежелательным запускам.
Например, если webhook отправляет одновременно PUSH_ARTIFACT и PULL_ARTIFACT события на один EventListener, а у вас есть Trigger без interceptor, оба события запустят pipeline. Используйте interceptors для маршрутизации разных типов событий на разные Trigger или pipeline.
Для упрощения документации предполагается, что pipeline готов и принимает следующие параметры:
Пожалуйста, замените на актуальную информацию вашего pipeline.
Далее нужно настроить только два триггера:
Создание триггера Push Artifact
Сохраните следующий YAML в файл harbor-push-trigger.yaml:
Создайте ресурс в среде:
Пример фильтрации по типу события: Если webhook Harbor настроен на отправку как Push, так и Pull событий, и вы хотите обрабатывать их по-разному, можно создать отдельные Trigger с CEL interceptors для фильтрации по типу события:
Триггер для Push событий (как выше):
Триггер для Pull событий (если нужно):
Это гарантирует, что push события запускают только push pipeline, а pull события — только pull pipeline, даже если оба типа событий отправляются на один EventListener.
Создание триггера Scanning Completed
Сохраните следующий YAML в файл harbor-scanning-trigger.yaml:
Настройте Interceptor по необходимости. Можно фильтровать по статусу сканирования, уровню критичности уязвимостей и т.д. Обратите внимание, что структура scan_overview использует динамические MIME-типы в ключах, поэтому JSONPath выражение нужно корректировать в зависимости от типа сканирования.
Создайте ресурс в среде:
Проверка триггеров
Проверьте, запушив образ в Harbor и запустив сканирование уязвимостей.
CLI:
Статус выполнения pipeline можно получить командой kubectl -n <namespace> get pipelinerun.
Консоль:
Перейдите в Pipelines > PipelineRuns для просмотра запущенных pipeline.
Use Cases
Сценарий 1: Автоматический деплой образов
Сценарий: Автоматически деплоить контейнерные образы в staging или production при их push в Harbor.
Настройка:
- Создать Trigger с использованием binding
harbor-push-artifact - Настроить pipeline для pull образа с помощью
artifact-resource-urlи деплоя в целевую среду - Опционально фильтровать по namespace репозитория или шаблону тегов с помощью CEL interceptors
Примеры использования:
- Деплой образов с тегом
productionв production среду - Деплой образов из определённых namespace в staging
- Запуск деплоя только для образов, соответствующих определённым шаблонам имен
Сценарий 2: Применение политики безопасности
Сценарий: Применять политики безопасности, блокируя деплой образов с критическими уязвимостями.
Настройка:
- Создать Trigger с binding
harbor-scanning-completed - Использовать CEL interceptor для фильтрации сканирований с критическими уязвимостями
- Настроить pipeline для:
- Проверки количества уязвимостей из результатов сканирования
- Блокировки деплоя при превышении порога критических уязвимостей
- Отправки уведомлений команде безопасности
Примеры использования:
- Запрет деплоя образов с критическими уязвимостями
- Автоматическая карантина образов с уязвимостями высокого риска
- Генерация отчетов по безопасности для соответствия требованиям
Сценарий 3: Управление жизненным циклом артефактов
Сценарий: Автоматически управлять жизненным циклом артефактов на основе паттернов использования и политик хранения.
Настройка:
- Создать Trigger для событий
harbor-pull-artifactиharbor-delete-artifact - Отслеживать использование и возраст артефактов
- Автоматически удалять старые или неиспользуемые артефакты согласно политикам
Примеры использования:
- Архивировать старые артефакты, которые не тянулись 90 дней
- Очистка артефактов разработки после деплоя в production
- Поддержание соответствия политикам хранения данных
Сценарий 4: Многоступенчатый CI/CD pipeline
Сценарий: Построить полный CI/CD pipeline, который запускается при push образа, выполняет тесты, сканирует безопасность и деплоит в зависимости от результатов сканирования.
Настройка:
- Создать несколько Trigger:
- Триггер
harbor-push-artifact: запуск сборки и тестирования - Триггер
harbor-scanning-completed: продолжение деплоя при успешном сканировании
- Триггер
- Использовать зависимости pipeline и workspaces для обмена артефактами между этапами
Примеры использования:
- Workflow Build → Test → Scan → Deploy
- Параллельное тестирование и сканирование для ускорения обратной связи
- Условный деплой на основе результатов тестов и сканирования