Git Jenkins和Gerrit与google repo scm的集成

Git Jenkins和Gerrit与google repo scm的集成,git,jenkins,gerrit,repo,Git,Jenkins,Gerrit,Repo,我写这篇文章是因为我不清楚如何配置jenkins从gerrit那里获取构建项目所需的更改 网上有很多关于如何连接所有这些代码的教程/示例。 但我没有找到任何解释我想做什么的方法。 我认为这是可能的,但是。。。好。我不确定 我的设置: 我有一个repo清单,其中包含最终应用程序的许多不同模块。该应用程序是以这种方式编写的,因为我可以更改一个模块,并用另一个模块替换它,用类似的代码执行不同的工作。例如,它们可以针对不同的客户进行个性化设置 我在jenkins中设置了一个作业,捕捉每个子模块中的每个提

我写这篇文章是因为我不清楚如何配置jenkins从gerrit那里获取构建项目所需的更改

网上有很多关于如何连接所有这些代码的教程/示例。 但我没有找到任何解释我想做什么的方法。 我认为这是可能的,但是。。。好。我不确定

我的设置: 我有一个repo清单,其中包含最终应用程序的许多不同模块。该应用程序是以这种方式编写的,因为我可以更改一个模块,并用另一个模块替换它,用类似的代码执行不同的工作。例如,它们可以针对不同的客户进行个性化设置

我在jenkins中设置了一个作业,捕捉每个子模块中的每个提交

我将Jenkins连接到Gerrit,我可以使用Gerrit trigger开始构建

它工作,我可以建立我的主人和目前的主人

我的问题是,当我发送一个补丁进行审查时,詹金斯构建了主程序,而不是我发送的补丁。我想在将最后一个补丁集成到master之前测试它

模块不能独立构建,因为它们都以某种方式连接,所以我无法单独检查每个部分


有人能够完成这样的任务?

关键是在:作业>配置>源代码管理>Git中相应地设置“存储库”>“高级..”>“Refspec”和“要构建的分支”>“分支说明符”字段

如果要构建“主”分支,请设置:

Refspec = +refs/heads/master:refs/remotes/origin/master

Branch Specifier = refs/heads/master
Refspec = $GERRIT_REFSPEC:$GERRIT_REFSPEC

Branch Specifieer = $GERRIT_REFSPEC
如果要构建修补程序集,请设置:

Refspec = +refs/heads/master:refs/remotes/origin/master

Branch Specifier = refs/heads/master
Refspec = $GERRIT_REFSPEC:$GERRIT_REFSPEC

Branch Specifieer = $GERRIT_REFSPEC

单击字段右侧的“?”以查看更多详细信息。

当Gerrit触发器启动Jenkins作业时,您可以在执行生成之前执行以下操作以准备工作区:

  • 使用“repo sync”签出所有存储库
  • 使用GERRIT_项目和GERRIT_REFSPEC GERRIT Trigger env变量并执行以下命令以签出已更改存储库的补丁集:

    cd$GERRIT_项目

    git获取https://USER@服务器/a/$GERRIT\u项目$GERRIT\u参考规范和git签出获取\u头

    git获取ssh://USER@服务器:29418/$GERRIT\u项目$GERRIT\u参考规范和git签出获取头

  • 请参见手册页:

    repo init -u git://gerrit.mycompany.net/mymanifest.git
    repo sync
    repo download $GERRIT_PROJECT $GERRIT_CHANGE_NUMBER/$GERRIT_PATCHSET_NUMBER
    

    。。。做你想要的。

    你好,马塞洛,谢谢你的回复。我明白你在说什么了。但是配置>源代码管理>Git。。。我使用的是谷歌回购CSM,而不是直接使用git。所以,如果我的变化是在一个子项目中,比如说在回购的子git模块中。我需要结帐所有谷歌回购与回购同步,但包括正确的补丁上传到gerrit。您的回复与git和Reto不相关吗?对不起,您是对的。我将尝试发布另一个解决方案。谢谢。我检查了一下,稍微修改一下就行了。修改是为了适应我的环境。cd$GERRIT_项目git fetchssh://jenkins@$GERRIT_主机:29418/$GERRIT_项目$GERRIT_REFSPEC&&git checkout FETCH_HEADCool。我编辑了答案,在url中添加了SSH选项和缺少的$GERRIT_项目。