git jenkins高级功能

Ken*_*awa 9 git jenkins

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

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

这是一段摘录:

设置Jenkins项目,并将Git SCM中的"分支"字段留空.这将导致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.

问题是,如果构建失败,那么集成分支的状态是什么?我只假设它以某种方式恢复到合并之前的提交.如果没有,那么集成分支将保持合并打破构建,使得其他分支无法合并和构建.

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

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

Von*_*onC 2

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");
}
Run Code Online (Sandbox Code Playgroud)

所以我认为失败的合并不会对后续构建产生任何影响。