Перейти к содержимому

Настройка вебхука репозитория

Настройте подписанные веб-перехватчики только для чтения для репозиториев GitHub, GitLab, Forgejo и Gitea.

Инструкции PAT/OAuth на этой странице используют вебхуки отдельных репозиториев. Подключения GitHub App используют единый вебхук и настраиваются через диалог приложения.

Repovio может получать подписанные веб-перехватчики для синхронизации отслеживаемого репозитория раньше обычного интервала опроса. Он никогда не создает, не обновляет, не удаляет и не тестирует веб-перехватчики через API-интерфейсы поставщика. Администратор вручную настраивает каждый веб-перехватчик репозитория в GitHub, GitLab, Forgejo или Gitea.

Откройте Репозитории, выберите отслеживаемый репозиторий и используйте его карточкуВебхук репозитория. На карточке отображается URL-адрес обратного вызова для конкретного репозитория, генерируется или принимается секрет подписи и сообщается о последней принятой доставке. Repovio никогда не отправляет эту конфигурацию провайдеру.

Вебхуки — это оптимизация, а не источник истины. Подписанные полезные данные должны идентифицировать репозиторий, выбранный URL-адресом обратного вызова. Затем Repovio считывает текущие данные через настроенный адаптер поставщика, доступный только для чтения. Принятые поставки ставятся в очередь на надежную синхронизацию репозитория; доставки, полученные в течение 15 секунд, объединяются. Резервный интервал опроса по умолчанию составляет 30 минут.

Настройте вебхук репозитория

  1. Добавьте репозиторий в Repovio и откройте его карточку Вебхук репозитория.
  2. Скопируйте URL-адрес обратного вызова.
  3. Создайте уникальный секрет подписи с высокой энтропией или вставьте точный токен подписи, предоставленный поставщиком. Никогда не используйте повторно токен доступа или секрет другого репозитория.
  4. Сохраните секрет. Repovio шифрует его с помощью AES-256-GCM и никогда не возвращает его через API.
  5. Настройте URL-адрес обратного вызова и секрет в настройках провайдера этого репозитория.
  6. Оставьте включенной проверку TLS и отправьте тестовую доставку.

Стабильные обратные вызовы используют /api/webhooks/<provider>/<repository-id>. Также доступны версии обратных вызовов /api/v1/webhooks/<provider>/<repository-id>. URL-адреса обратного вызова учетной записи поставщика из Repovio 0.2.9 и более ранних версий больше не принимаются. После обновления воссоздайте каждый веб-перехватчик с обратным вызовом репозитория и новым секретом репозитория.

Успешные доставки возвращают HTTP 202 с { "accepted": true }. Идентификаторы повторной доставки поставщика возвращают { "accepted": true, "duplicate": true } и не ставят в очередь другую синхронизацию. Неизвестные или отключенные репозитории, отключенные учетные записи поставщиков, отсутствующие секреты, недействительные подписи, несовпадающие идентификаторы репозиториев поставщиков и отсутствующие идентификаторы доставки отклоняются без раскрытия деталей конфигурации.

Синхронизация в очереди сохраняется после перезапуска API. Несколько экземпляров используют аренду базы данных и не синхронизируют одну и ту же учетную запись поставщика одновременно. Заголовки ограничения скорости задерживают работу затронутой учетной записи, а ограниченные повторы обрабатывают временные сбои.

GitHub Действия

  1. Откройте Настройки → Вебхуки репозитория и выберитеДобавить вебхук.
  2. Используйте https://repovio.example.com/api/webhooks/github/<repository-id> в качестве URL-адреса полезной нагрузки.
  3. Выберите application/json, вставьте секрет репозитория и подпишитесь на Выполнения рабочего процесса (workflow_run).
  4. Оставьте включенной проверку SSL и сохраните вебхук.

Repovio проверяет X-Hub-Signature-256 по необработанному телу и использует X-GitHub-Delivery для идемпотентности. См. документация по событию веб-перехватчика GitHub.

трубопроводы GitLab

  1. Откройте Настройки → Вебхуки проекта и выберитеДобавить новый вебхук.
  2. Используйте https://repovio.example.com/api/webhooks/gitlab/<repository-id> в качестве URL-адреса.
  3. Создайте токен подписи и сохраните его полное значение, включая whsec_, на карте репозитория Repovio.
  4. Выберите События конвейера, включите проверку SSL, сохраните и отправьте тестовую доставку.

Repovio проверяет подписи стандартных веб-перехватчиков HMAC-SHA256 и предпочитает webhook-id для идемпотентности. Устаревшие заголовки X-Gitlab-Token и X-Gitlab-Event-UUID по-прежнему поддерживаются для более старых экземпляров. См. GitLab документация вебхука.

Forgejo Действия

  1. Откройте Настройки → Вебхуки репозитория и добавьте собственный вебхукForgejo JSON.
  2. Используйте https://repovio.example.com/api/webhooks/forgejo/<repository-id> в качестве целевого URL-адреса.
  3. Вставьте секрет репозитория и выберите Push event плюс все доступные события Actions.
  4. Оставьте включенной проверку TLS и сохраните вебхук.

Repovio проверяет X-Forgejo-Signature и использует X-Forgejo-Delivery для идемпотентности. Заголовки, совместимые с Gitea, по-прежнему принимаются для совместимости с Forgejo. См. Forgejo документация вебхука.

Gitea Действия

  1. Откройте Настройки → Веб-перехватчики репозитория и добавьте собственный веб-перехватчикGitea JSON.
  2. Используйте https://repovio.example.com/api/webhooks/gitea/<repository-id> в качестве целевого URL-адреса.
  3. Вставьте секрет репозитория и выберите Push event плюс все доступные события рабочего процесса.
  4. Оставьте включенной проверку TLS и сохраните вебхук.

Repovio проверяет X-Gitea-Signature по необработанному телу и использует X-Gitea-Delivery для идемпотентности. См. Gitea документация вебхука.

Устранение неполадок

  • 401 означает, что Repovio не удалось проверить репозиторий, тип поставщика, секрет, подпись, идентификатор хранилища полезных данных или идентификатор доставки. Подтвердите UUID репозитория обратного вызова и точный секрет.
  • 202 с duplicate: true ожидается, когда поставщик повторяет попытку доставки.
  • Успешная доставка запускает синхронизацию только для чтения; он никогда не изменяет рабочий процесс поставщика.
  • Проверьте /api/health на предмет постоянного статуса синхронизации поставщика.
  • Установите SCHEDULER_SYNC_INTERVAL_SECONDS=1800 для 30-минутного отката. — SCHEDULER_ENABLED=false сохраняет запросы в очереди, но приостанавливает постановку в очередь и обработку.

Настройка GitHub App