Jenkins 和 Gerrit 与 google repo scm 集成

Jenkins and Gerrit integration with google repo scm

我写这篇文章是因为我不清楚如何配置 jenkins 以从 gerrit 获取用于构建我的项目的更改。

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

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

我在 jenkins 中设置了一个作业来捕获每个子模块中的每个提交。

我将 Jenkins 连接到 Gerrit,然后我可以使用 gerrit 触发器开始构建。

有效,我可以构建我的母版和当前的母版。

我的问题是,当我发送补丁以供审查时,jenkins build the master,而不是我发送的补丁。我想在将它集成到 master 之前测试最后一个补丁。

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

有人能够完成这样的事情吗?

关键是相应地设置 "Repositories" > "Advanced.." > "Refspec" 和 "Branches to build" > "Branch Specifier" 字段:Job > Configure > Source代码管理 > Git

如果要构建 "master" 分支,请设置:

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

Branch Specifier = refs/heads/master

如果要构建补丁集,请设置:

Refspec = $GERRIT_REFSPEC:$GERRIT_REFSPEC

Branch Specifieer = $GERRIT_REFSPEC

点击“?”在字段右侧查看更多详细信息。

当 Gerrit 触发器启动 Jenkins 作业时,您可以执行以下命令在执行构建之前准备工作区:

  1. 使用"repo sync"签出所有存储库
  2. 使用GERRIT_PROJECT和GERRIT_REFSPEC Gerrit Trigger env变量并执行以下命令来检查已更改存储库的补丁集:

    cd $GERRIT_PROJECT

    git 获取 https://USER@SERVER/a/$GERRIT_PROJECT $GERRIT_REFSPEC && git 结账 FETCH_HEAD

    git 获取 ssh://USER@SERVER:29418/$GERRIT_PROJECT $GERRIT_REFSPEC && git结帐FETCH_HEAD

参见 gerrit-trigger-plugin 手册页:

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

...满足您的需求。