Интеграционный менеджер Git Workflow с использованием Jenkins / Hudson - PullRequest
8 голосов
/ 18 ноября 2011

Я пытаюсь реализовать измененный рабочий процесс Integration-Manager, аналогичный описанному в ProGit .

Diagram of the Integration-Manager workflow

Вместо выполнения integration managerслияния, я хочу, чтобы разработчики слились локально, прежде чем публиковать свой код, и я хочу Quality Gateway, который обеспечивает соблюдение наших стандартов непрерывной интеграции, таких как минимальный уровень покрытия кода и 100% прохождение тестов, прежде чем разрешить коду входить в благословенный репозиторий.быть проверенным другими разработчиками.Идея состоит в том, что код в благословенном хранилище всегда соответствует минимальному стандарту, который мы определяем и всегда строим.

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

До сих пор я настроил систему таким образом, чтобы имелись следующие общедоступные репозитории: благословенный репозиторий, репозиторий на сервере сборки для Jenkins, который является голым репозиторием, доступным через gitosis, и, конечно, разработчиком.собственные репозитории.

У меня есть разработчики, извлекающие из благословенного репо и толкающие в интеграционное репо.Теперь я пытаюсь заставить Дженкинса подтолкнуть успешные сборки из репозитория интеграции к благословенному репо.

Пока что я видел только один вариант, похожий на тот, который я пытаюсь достичь, - этоПараметр «Push Only If Build Succeeds» в настройках Git Publisher в действиях Post Build в конфигурации проекта Jenkins.Однако эти параметры не позволяют вам указать push-адрес или удаленный канал, на который нужно нажать.

Насколько я понимаю, настройки Git Publisher будут толкать клоны репозитория Jenkins в его рабочую область обратно в общедоступную Jenkins.репо, но я хочу отправить на другой пульт, благословенный репозиторий.

У кого-нибудь есть предложения, как заставить Дженкинса толкнуть к благословенному репо?

РЕДАКТИРОВАТЬ 0 : Я попытался поместить шаг Post для выполнения команды push в моем благословенном хранилище.Это, кажется, работает, в этом нет никаких ошибок.Однако никакие изменения не выдвигаются, и журналы показывают, что git считает, что все обновлено:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO]     ------------------------------------------------------------------------ 
[INFO] Total time: 1 minute 7 seconds 
[INFO] Finished at: Fri Nov 18 16:10:50 UTC 2011 
[INFO] Final Memory: 19M/45M 
[INFO] ------------------------------------------------------------------------ 
channel stopped 
[My Project] $ /bin/sh -xe /tmp/hudson5604254372179801803.sh + git push git@example.com:my-project.git --all
Everything up-to-date

Я не знаю, почему git считает, что нечего нажимать, потому что определенно есть.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

А как насчет использования действия Jenkins «Только для толкания при успешной сборке» с подключением после фиксации или после получения в интеграционном репозитории для отправки в благословенный репозиторий всякий раз, когда Jenkins запускает после успешной сборки?

1 голос
/ 18 ноября 2011

Рассматривали ли вы добавление Gerrit в ваш рабочий процесс.Изменения передаются в Gerrit, а затем ваш CI запускает сборку и сообщает о ваших тестах.Его можно настроить так, чтобы до его слияния с вашим счастливым репо требовались другие одобрения (например, проверки авторизованного кода). EGit использует его при разработке, http://egit.eclipse.org/r/.Есть и другие обсуждения этого рабочего процесса, например, блог alblue .

...