【问题标题】:Rolling back a git commit without triggering a Jenkins build在不触发 Jenkins 构建的情况下回滚 git 提交
【发布时间】:2014-04-28 06:13:18
【问题描述】:

我正在为工作中的新项目设置 Git/Jenkins。这是工作中的任何人第一次使用这些工具中的任何一个(目前我们正在使用 SVN 和自定义构建系统)。我设法让系统正常工作;开发人员进行提交,推送到原始/开发分支,该分支使用接收后触发器触发 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 不要触发构建?最终目标是重置分支,我对机制持开放态度。我可以想到几种方法:添加一些 post-receive 挂钩可以获取的信息,但是我的研究似乎表明您不能将参数传递给挂钩。由于没有提交,我不能使用上次提交的信息。如果它以某种方式检测到回滚,我是否最好在触发的 Jenkins 构建中中止某些东西?欢迎任何想法。

另一个想法。是否需要回滚开发?如果再次推动起源/开发会发生什么?它会覆盖已经存在的内容、添加内容还是失败?开发人员将在进行更改之前从 origin/master 中提取。 Git 中的整个分支事情让我有点困惑。

【问题讨论】:

    标签: git version-control jenkins


    【解决方案1】:

    代替 Jenkins 监控起源/开发,它可以监控另一个分支(如 build

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2012-05-28
      • 2016-12-02
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      相关资源
      最近更新 更多