2013-10-31 65 views
2

在我们的项目中,我们有一个从远程主分支运行的jenkins作业。开发人员经常会从这位远程主服务器重新获取最新的更改到本地副本中。 我们想要的是当jenkins破裂时(红色或黄色的球)避免这种重新镶嵌。说明是“只有当jenkins是绿色的时候才需要rebase”,但是......人们很懒:-)是否可以阻止git pull/fetches?

那么,我们可以在jenkins作业中做些什么,以便在执行失败时阻止git repo?

此致敬礼!

+0

Jenkins是否也在管理GIT存储库? git repo和Jenkins在同一台机器上运行吗?也许看看使用Gerrit来管理您的共享GIT回购。 Jenkins的Gerrit插件可用于自动验证每个代码提交。这将是一个更好的机制来实现您所需的工作流程.http://code.google.com/p/gerrit/ –

+0

不,Jenkins与Gerrit/Git不在同一台机器上。我知道你以这种方式使用Gerrit的意思,但Jenkins的工作大约需要2个小时(而且需要更长的时间),所以我们无法在每次推送时启动它。 –

回答

0

看来你没有验证你的提交在合并到你的git仓库之前,而是在频繁的时间间隔合并到git后验证它们。

我认为除了从git存储库中删除所有用户的ssh-key,我们不能禁用git pull,这是不可行的。 我们可以在Jenkins中创建一个后期构建步骤,它可以处理Git中的authorized_keys文件以阻止访问git repo。 (我不知道它是否有效)

我们有一个相同的场景,每个构建+验证需要2个小时左右,我们无法真正为每个提交执行此测试。但我们能够处理这种情况。

如果您正在使用格里特:

而不是使用詹金斯格里特触发插件,我们可以有我们自己的脚本,它会轮询整个格里特对于具有所有批准,并准备合并和运行验证的变化。验证成功后,该作业中的所有更改将自动合并(在Gerrit中提交)。有了这个,我们可以避免错误的提交被合并。

如果你不使用格里特:

我们可以有两个单独的分支

  1. 开发分支(其中所有的开发人员把他们的变化)
  2. 集成分支(从开发人员可以拉他们的变化)

所有的开发人员将他们的变化推到开发分支并且在频繁的时间间隔内,我们可以验证开发分支并仅在验证成功时才将更改推送到集成分支。

+0

是的,我们正在使用gerrit。我们可能会考虑您提出的解决方案,但我有一个问题。你说如果工作成功了,这些变化就会合并到GIT中,但是在工作正在进行时我们被推入gerrit的那些变化呢?他们会被合并到Git吗? –

+0

合并到Git中意味着它们将在Gerrit中提交。我们仍然可以在工作正在进行时将更改推向gerrit。如果工作成功,只有当前工作的变化才会合并。 – Sridhar

+0

编辑我的答案,以避免混淆 – Sridhar

相关问题