在不触发Jenkins构建的情况下回滚git提交

时间:2014-03-09 01:41:37

标签: git version-control jenkins

我正在为工作中的新项目设置Git / Jenkins。这是第一次使用这些工具的人(目前我们正在使用SVN和自定义构建系统)。我设法使系统工作;开发人员进行提交,推送到origin / develop分支,使用post-receive触发器触发Jenkins作业,然后Jenkins运行许多测试作业。如果测试通过,Jenkins会推动origin / master。

这很好用,但问题是构建失败时会发生什么。要求是origin / master和origin / develop分支应该是相同的。因此,当构建失败时,origin / develop应该重置为与origin / master相同的版本。同样,我可以使用以下命令执行此操作(这是在失败的构建时触发的另一个Jenkins作业的一部分):

git checkout develop
git reset --hard origin/master
git push -f

这正确地重置了分支,一切都很顺利。除了一件事。 Git看到了对开发分支的这一新推动并触发了新的构建。

所以我的问题是,如何将开发分支重置为主分支并告诉Git不触发构建?最终目标是重置分支,我对机制开放。我可以想到几种方法:添加一些后接收钩子可以获取的信息,但是我的研究似乎建议你不能将参数传递给钩子。由于没有提交,我无法使用上次提交的信息。如果它以某种方式检测到回滚,我最好在触发的Jenkins构建中放置一些内容来中止吗?任何想法都会受到欢迎。

另一个想法。是否需要回滚开发?如果对原点/开发进行另一次推动会发生什么?它会覆盖已存在的东西,添加它还是失败?在进行更改之前,开发人员将从origin / master中撤出。 Git中的整个分支让我感到困惑。

1 个答案:

答案 0 :(得分:1)

而不是Jenkins监视源/开发,它可以监视另一个分支(如build

然后你可以添加一个post-receive钩子,monitor new commits on the development branch和:

  • if detects a forced push,什么都不做
  • 如果检测到常规推送(添加新提交),则会重置build新HEAD上的development分支。
    重置将使Jenkins在构建分支上触发新构建。

如果构建失败,则保持build分支不变(不触发任何内容),但您可以根据需要重置development分支。

我们的想法是在开发人员(推送提交)和构建之间添加一个中间级别的控制(由Jenkins完成)