Git Jenkins расширенная функция - PullRequest
9 голосов
/ 25 июля 2011

Наша команда использует jenkins и git.Мы стремимся реализовать расширенную функцию плагина git, которая позволяет выполнять предварительную сборку, прежде чем отправлять коммиты в благословенный репозиторий.См. https://wiki.jenkins -ci.org / display / JENKINS / Git + Plugin # GitPlugin-AdvancedFeatures

Однако у меня возникают проблемы с пониманием всего процесса.

Вот выдержка:

Настройте свой проект Jenkins и оставьте поле 'branch' в поле Git SCM пустым.Это заставит Jenkins рассмотреть любые изменения в любой ветви для сборки.

Далее выберите конкретное имя ветви в качестве цели интеграции в разделе «Advanced» - (например, «master» или «stable»),и выберите «Объединить перед сборкой».

Выберите «Переместить теги GIT обратно в исходный репозиторий» из действий после сборки (это необходимо для обновления вашего централизованного репозитория git с результатами сборки).

Теперь разработчики никогда не должны связываться напрямую с вашей веткой интеграции («master» или «stable»).Вместо этого они должны либо использовать функциональные ветви, либо создавать новые удаленные ветви при фиксации (например: «git push origin HEAD: refs / head / myNewFeature»).Вы также можете настроить свой GIT-репозиторий так, чтобы он принимал коммиты только в ветке интеграции от Jenkins.

Все готово.Коммиты теперь должны быть автоматически объединены с веткой интеграции (они потерпят неудачу, если они не объединяются чисто) и собраны.Если сборка завершится успешно, результат слияния будет перенесен обратно в удаленный репозиторий git.

Я понимаю, что

  1. Разработчики создают удаленные ветви, из которых jenkins будет извлекать из
  2. jenkins объединяет ветку с его веткой интеграции иbuild
  3. Если сборка завершится успешно, слияние будет отправлено в blessed-repo / master.

Вопрос в том, если сборка не удалась, в каком состоянии находится ветвь интеграции?Я бы только предположил, что он как-то возвращается к коммиту до слияния.Если нет, то ветвь интеграции сохранит объединение, которое нарушило сборку, что сделает невозможным объединение и построение других ветвей.

Это правда?К сожалению, это не ясно из вики.

Кроме того, кто-нибудь знает пример, который я могу посмотреть?

1 Ответ

2 голосов
/ 25 июля 2011

Из того, что я вижу в методе GitSCM.checkout , слияние начинается сначала с извлечения, а в случае сбоя слияния восстанавливает ветку-кандидат с другой проверкой:

// checkout origin/blah
ObjectId target = git.revParse(mergeOptions.getRemoteBranchName());

git.checkoutBranch(paramLocalBranch, target.name());

try {
  git.merge(revToBuild.getSha1().name());
} catch (Exception ex) {
  // We still need to tag something to prevent
  // repetitive builds from happening - tag the
  // candidate
  // branch.
  git.checkoutBranch(paramLocalBranch, revToBuild.getSha1().name());
  [... tag applied ...]
  buildData.saveBuild(new Build(revToBuild, buildNumber, Result.FAILURE));
  throw new AbortException("Branch not suitable for integration as it does not merge cleanly");
}

Так что я не думаю, что неудачное объединение повлияло на последующие сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...