我们的团队使用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存储库。
我的理解是,
问题是,如果构建失败,那么集成分支的状态是什么?我只假设它以某种方式恢复到合并之前的提交。如果没有,那么集成分支将保持合并打破构建,使其他分支无法合并和构建。
这是真的吗?不幸的是,它从维基不清楚。
另外,有人知道我可以看一个例子吗?
答案 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");
}
所以我认为合并失败对后续构建没有任何影响。