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

Интеграция с GitLab

Руководство подходит для GitLab.com и собственного экземпляра GitLab. CodeGraph получает метаданные репозитория, импортирует проекты группы.

Интеграции

Руководство подходит для GitLab.com и собственного экземпляра GitLab. CodeGraph получает метаданные репозитория, импортирует проекты группы, синхронизирует push-события и создаёт снимки ревью для merge request. Общий процесс описан в Импорте проекта.

Поддерживаемый контракт

Поддерживаемый контракт
Возможность Текущая поддержка
Метаданные репозитория через GitLab API v4 Да
Получение HEAD ветки Да
Список репозиториев группы Да
Входящий вебхук push и merge request Да
Публикация комментария ревью Да, через общее задание снимка; отдельной точки GitLab нет

Контракт задан в src/project_import/repository_suite/repository_provider_adapters.py, а не унаследован из предположений о совместимости с GitHub.

Подключение и импорт

В --base-url укажите корень API, а в --host — адрес для clone URL:

python -m src.cli repos connect-provider --name gitlab-main --provider gitlab --base-url https://gitlab.example.com/api/v4 --host gitlab.example.com
python -m src.cli repos provider-health --connection gitlab-main
python -m src.cli repos import --connection gitlab-main --repo GROUP/REPOSITORY
python -m src.cli repos status

Для ограниченного импорта группы используйте ту же привязку:

python -m src.cli repos bulk-import --connection gitlab-main --namespace GROUP --dry-run

Сначала проверьте план, затем при необходимости уберите --dry-run. Для приватных проектов нужен токен из защищённого канала секретов заказчика. Не оставляйте его в файлах репозитория и истории shell. Проверку TLS не отключайте; для собственного CA используйте --ca-bundle-path.

Настройка вебхука

Отправляйте Push Hook и Merge Request Hook на адрес:

POST /api/v1/admin/runtime/webhooks/gitlab

Общее значение задайте в CodeGraph как GITLAB_WEBHOOK_SECRET. GitLab передаёт тип события в X-Gitlab-Event, а секрет — открытым токеном в X-Gitlab-Token; CodeGraph сравнивает его за постоянное время.

Адаптер GitLab использует сетевые ограничения, TLS, ротацию секрета, идентификаторы доставок и дедупликацию устойчивой очереди для контроля повторов. Ответ 202 Accepted подтверждает приём; завершение проверяйте по заданию и состоянию репозитория.

Наблюдение и восстановление

Привязки, задания синхронизации, очередь, снимки ревью и восстановление доступны по путям:

/api/v1/integrations/repositories
POST /api/v1/integrations/repositories/review-snapshots/{snapshot_id}/rerun
GET /api/v1/admin/runtime/webhooks/status/{project_id}

Повторное задание публикует заметку GitLab, если запрошен publish_review и доступен токен провайдера. Доставку заметки в merge request подтверждает записанный статус.

Аналогичные команды находятся под python -m src.cli repos. Сначала проверьте provider-health, затем конкретную привязку и неуспешное задание. Повторяйте только это задание и сверяйте HEAD репозитория с HEAD CPG: завершение подтверждается статусом задания и репозитория.

Граница безопасности

  • Ограничьте токен репозиториями и API-операциями пилота.
  • Закройте административный runtime-маршрут от обычных пользователей и удаляйте X-Gitlab-Token из логов.
  • Для собственного сервера установите доверенный CA вместо отключения TLS.
  • Считайте заголовки, diff и комментарии merge request недоверенными данными до LLM-обработки.

Источник истины

  • Адаптер провайдера: src/project_import/repository_suite/repository_provider_adapters.py
  • CLI репозиториев: src/cli/repo_suite/repos_parser.py
  • Проверка вебхука: src/api/auth/machine/webhook_auth.py
  • Текущие маршруты: REST API