Как сохранить локальное зеркало git в актуальном состоянии без опроса? - PullRequest
0 голосов
/ 19 ноября 2018

Сценарий: наша команда разработчиков использует Jenkins для непрерывной интеграции, и часть нашего кода имеет открытый исходный код и поэтому размещена на GitHub.com .

У нас есть локальное зеркало соответствующих репозиториев GitHub, и наш локальный сервер GitBlit настроен на периодический опрос репозиториев GitHub для обновления локального зеркала.

Это "вид работ"; но сценарий проблемы таков:

  1. Разработчик понимает, что ему нужно внести изменения в кодовую базу с открытым исходным кодом, поэтому он вносит изменения в репозиторий GitHub, а также обновляет подмодули в наших репозиториях Git с закрытым исходным кодом, чтобы они указывали на новую ревизию.
  2. Локальный разработчик запускает автоматическую сборку на Jenkins, чтобы он мог проверить / убедиться, что изменения работают на всех платформах
  3. Автоматическая сборка Jenkins завершается неудачно, потому что локальное зеркало репозитория GitHub еще не обновлено, чтобы отразить оригинал, поэтому, когда Jenkins пытается обновить подмодули в его различных рабочих пространствах, локальное зеркало не распознает идентификатор ревизии, на который указывают git-репозитории с закрытым исходным кодом.

Наш текущий способ решения этой проблемы - настроить GitBlit для более частого опроса GitHub, но мне не нравится это решение, так как оно вызывает больше периодического / ненужного трафика через Интернет, и все же не совсем избегает вероятность сбоев сборки, например в случае, когда разработчик отправляет изменения, а затем сразу же запускает сборку.

Существует ли известное "передовое" решение для этой проблемы, которое автоматически предоставило бы нам надежное поведение сборки Jenkins, а также позволило бы избежать постоянного опроса GitHub?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я думаю, что лучшее решение здесь - это использовать настоящее зеркало Git-репозитория, а не пытаться свернуть свое собственное. Без доступа к webhooks (при условии, что у вас нет репозитория GitHub), лучшее, что вы можете сделать, это опрос.

Доступны решения с открытым исходным кодом (на ум приходят Artifactory и Nexus), которые могут отражать Git-репозиторий и обеспечивать функциональность кэширования. Я думаю, вы обнаружите, что эти зеркала гораздо надежнее, чем скрипт, который обновляется через определенный интервал. Более того, я думаю, что они могут делать такие вещи, как запуск быстрой проверки хеша для репозитория в восходящем потоке, когда пользователь пытается получить данные, поэтому они знают, устарели ли они (и немедленно обновят, чтобы предоставить правильную версию).

0 голосов
/ 19 ноября 2018

Вы можете использовать Github webhook , чтобы уведомить вашу локальную инфраструктуру о следующих событиях:

  • Хранилище перемещено в
  • Запрос на извлечение
  • Создан сайт GitHub Pages
  • В команду добавлен новый участник

Обратите внимание, что это минимизирует задержку, однако в некоторыхнапример, проблемы с сетью или частичное отключение инфраструктуры Github, это может привести к сбою сборки.

Настройка автоматического построения Jenkins для обновления локального зеркала перед сборкой, вероятно, является единственным безопасным решением.

...