Сценарий: наша команда разработчиков использует Jenkins для непрерывной интеграции, и часть нашего кода имеет открытый исходный код и поэтому размещена на GitHub.com .
У нас есть локальное зеркало соответствующих репозиториев GitHub, и наш локальный сервер GitBlit настроен на периодический опрос репозиториев GitHub для обновления локального зеркала.
Это "вид работ"; но сценарий проблемы таков:
- Разработчик понимает, что ему нужно внести изменения в кодовую базу с открытым исходным кодом, поэтому он вносит изменения в репозиторий GitHub, а также обновляет подмодули в наших репозиториях Git с закрытым исходным кодом, чтобы они указывали на новую ревизию.
- Локальный разработчик запускает автоматическую сборку на Jenkins, чтобы он мог проверить / убедиться, что изменения работают на всех платформах
- Автоматическая сборка Jenkins завершается неудачно, потому что локальное зеркало репозитория GitHub еще не обновлено, чтобы отразить оригинал, поэтому, когда Jenkins пытается обновить подмодули в его различных рабочих пространствах, локальное зеркало не распознает идентификатор ревизии, на который указывают git-репозитории с закрытым исходным кодом.
Наш текущий способ решения этой проблемы - настроить GitBlit для более частого опроса GitHub, но мне не нравится это решение, так как оно вызывает больше периодического / ненужного трафика через Интернет, и все же не совсем избегает вероятность сбоев сборки, например в случае, когда разработчик отправляет изменения, а затем сразу же запускает сборку.
Существует ли известное "передовое" решение для этой проблемы, которое автоматически предоставило бы нам надежное поведение сборки Jenkins, а также позволило бы избежать постоянного опроса GitHub?