git jenkins高级功能

时间:2011-07-24 20:40:51

标签: git jenkins

我们的团队使用jenkins和git。我们正在寻求实现git插件的高级功能,该功能允许在将提交提交到受祝福的存储库之前进行预构建。见https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures

但是,我无法理解整个过程。

以下是摘录:

  

设置Jenkins项目,并将Git SCM中的“branch”字段留空。这将导致Jenkins考虑对任何分支进行任何更改以进行构建。

     

接下来,选择一个特定的分支名称作为“高级”部分中的集成目标 - (例如“master”或“stable”),然后选择“在构建前合并”。

     

从构建后操作中选择“将GIT标记推回原始存储库”(这需要使用构建结果更新集中式git存储库)。

     

现在,开发人员不应该直接提交到您的集成分支('master'或'stable')。相反,他们应该使用功能分支,或者在提交时创建新的远程分支(例如:“git push origin HEAD:refs / heads / myNewFeature”)。您还可以将GIT存储库设置为仅接受来自Jenkins的集成分支的提交。

     

你已经完成了。提交现在应该自动与集成分支合并(如果它们没有干净地合并,它们将失败)并构建。如果构建成功,则合并的结果将被推回到远程git存储库。

我的理解是,

  1. 开发人员创建远程分支,jenkins将从中提取
  2. jenkins将分支与其集成分支合并并构建
  3. 如果构建成功,则合并将被推送到blessed-repo / master。
  4. 问题是,如果构建失败,那么集成分支的状态是什么?我只假设它以某种方式恢复到合并之前的提交。如果没有,那么集成分支将保持合并打破构建,使其他分支无法合并和构建。

    这是真的吗?不幸的是,它从维基不清楚。

    另外,有人知道我可以看一个例子吗?

1 个答案:

答案 0 :(得分:2)

从我所看到的GitSCM.checkout method开始,合并首先通过结账进行,如果合并失败,则使用另一个结账恢复候选分支:

// 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");
}

所以我认为合并失败对后续构建没有任何影响。