使用Jenkins / Hudson的Integration-Manager Git Workflow

时间:2011-11-18 13:54:27

标签: eclipse git hudson jenkins junit4

我正在尝试实施类似于ProGit中描述的修改后的Integration-Manager工作流程。

Diagram of the Integration-Manager workflow

我希望开发人员在发布代码之前在本地进行合并,而不是integration manager执行合并,我希望Quality Gateway强制执行我们的持续集成标准,例如最低级别的代码覆盖率在允许代码进入受其他开发人员检出的祝福存储库之前,100%测试通过。我们的想法是,受祝福的存储库中的代码始终满足我们定义并始终构建的最低标准。

我希望Jenkins能够执行质量网关的角色,只在构建成功时将代码推送到受祝福的存储库。

到目前为止,我已经建立了系统,以便有以下公共存储库:受祝福的存储库,Jenkins构建服务器上的存储库,这是通过gitosis访问的裸存储库,当然还有开发人员自己的存储库。

我让开发人员从有福的回购中撤出并推向整合回购。现在我正试图让Jenkins将成功的构建从集成回购推送到受祝福的回购。

到目前为止,我见过的唯一一个类似于我想要实现的选项是Jenkins项目配置中Post Build Actions的Git Publisher设置中的“Push Only If Build Succeeds”选项。但是,该选项不允许您指定push url或remote to push to。

据我了解,Git Publisher设置会将repo Jenkins的克隆推送到其工作区,回到Jenkins的公共仓库,但我想推送到另一个远程,即受祝福的存储库。

有没有人有任何建议让我如何让詹金斯推向受祝福的回购?

编辑0 : 我尝试使用Post Step来执行push命令到我的祝福存储库。这似乎有效,因为没有错误。然而,没有任何更改被推送,日志显示git认为一切都是最新的:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO]     ------------------------------------------------------------------------ 
[INFO] Total time: 1 minute 7 seconds 
[INFO] Finished at: Fri Nov 18 16:10:50 UTC 2011 
[INFO] Final Memory: 19M/45M 
[INFO] ------------------------------------------------------------------------ 
channel stopped 
[My Project] $ /bin/sh -xe /tmp/hudson5604254372179801803.sh + git push git@example.com:my-project.git --all
Everything up-to-date

我不知道为什么git认为没有什么可以推动的,因为肯定有。

2 个答案:

答案 0 :(得分:2)

使用Jenkins“Push Only If Build Succeeds”操作(在集成存储库中使用post-commit或post-receive挂钩),只要Jenkins在成功构建后推送,就可以推送到受祝福的存储库?

答案 1 :(得分:1)

您是否考虑过将Gerrit添加到工作流程中。将更改推送到Gerrit,然后您的CI运行构建并报告您的测试。它可以设置为在合并到您的祝福仓库之前需要其他批准(如授权代码审查)。 EGit在其开发中使用它http://egit.eclipse.org/r/。此工作流程还有其他讨论,例如alblue的博客。