【发布时间】: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