【Gerrit】Gerrit与Jenkins集成

8,997 阅读3分钟

前言

Gerrit作为code review工具,对代码的评审以及Merge等操作拥有灵活的控制。如果可以在Gerrit中将review与持续集成相结合,那么可以有效的提升代码质量。
本文主要介绍Gerrit和Jenkins的集成,将Jenkins自动化任务的能力赋予Gerrit,在代码提交到合入的各个阶段进行自动化检查。

Jenkins插件安装及配置

1. 安装

依次进入“系统管理 -> 管理插件 -> 可选插件”,搜索插件 Gerrit Trigger,点击安装即可。

2. 配置

依次进入“系统管理 -> Gerrit Trigger”,添加Gerrit Server,按照下图进行配置,然后测试连接。

jenkins配置

  • Name: 名称
  • Hostname:服务器域名或者IP
  • Frontend URL: Gerrit UI地址
  • SSH Port:SSH端口,Gerrit默认为29418
  • Username:连接Gerrit的用户名
  • SSH Keyfile:Jenkins服务器的私钥路径,同时需要将Jenkins公钥配置到上面的Gerrit用户的公钥列表中
  • SSH Keyfile Password:私钥文件密码,无则留空

如果想要将Jenkins构建的结果显示到Gerrit中,需要在 高级 中配置REST API。如下图所示,配置完成后测试是否可用:

REST API设置

  • Gerrit HTTP Username:Gerrit中的用户
  • Gerrit HTTP Password:Gerrit用户密码。需要在Gerrit UI的用户设置中选择 HTTP Password,生成HTTP密码。

Jenkins任务的配置

在Jenkins插件配置完成后,创建Jenkins任务,进行如下配置:

源码配置

源码配置

  • Repository URL:Gerrit中源码下载地址
  • Credentials:下载源码的认证,如果将Jenkins的执行机的公钥已配置到Gerrit用户中,此项可为空
  • Name:存储库的ID,例如origin,用于在其他远程存储库中唯一标识此存储库。这与你在git remote命令中使用的“name”相同。如果留空,Jenkins将为您生成唯一的名称。您通常希望在拥有多个远程存储库时指定此选项。
  • Refspec:refspec控制要检索的远程引用以及它们如何映射到本地引用。如果留空,它将为git fetch的正常行为一致认,它将所有branch heads检索为remotes/REPOSITORYNAME/BRANCHNAME。对于大多数情况,此默认行为都可以。 换句话说,默认的refspec是“+refs/heads/*:refs/remotes/REPOSITORYNAME/*”,其中REPOSITORYNAME是你在上面的“存储库名称”文本框中指定的值。
  • Branches to build:如果要跟踪存储库中的特定分支,请指定分支。如果留空,将检查所有分支的变化并构建。 最安全的方法是使用refs/heads/语法。这样预期的分支是明确的。
  • Additional Behaviours:当你有兴趣使用job构建multiple heads(最常见的是多个分支)时,您可以选择Jenkins如何选择以什么顺序构建的分支。 Jenkins中的这个扩展点被许多其他插件用来控制作业以构建特定的提交。当你激活这些插件时,您可能会看到他们在此处安装自定义策略。

要让 Git 插件下载你的更改,请将 Refspec 设置为 $GERRIT_REFSPEC,并将Additional Behaviours 设置为 Additional Behaviours/Strategy For Choosing What To Build,并选择 GERRIT Trigger 。 你可能还需要将 Branches to build 设置为 $GERRIT_BRANCH

如果这对你不起作用,请设置 Refspec 设置为 refs/changes/*:refs/changes/* ,并把 Branches to build 设置成 $GERRIT_REFSPEC

Gerrit Trigger配置

Gerrit Trigger配置

Gerrit Project:配置监控的代码库,右边配置监控的分支,配置详情请点击 问号 查看。

Trigger on: 指定要触发的事件类型。

  • PatchSet created: 当上传一个新的更改或补丁集时(Trigger on为空时默认选择)
  • Draft published:当发布一个修改或补丁集时(Trigger on为空时默认选择)
  • Change abandoned: 当一个更改被放弃时
  • Change merged:当更改合并 / 提交时
  • Change restored:当更改被还原时更改恢复了触发器
  • Comment added: 当指定的投票类别和值有review内容时
  • Reference updated: 当引用(例如分支或标记)更新时

其他

在上述配置完成后,配置需要执行的脚本等其他项即可。在监控的分支发生修改后,就会自动触发Jenkins任务进行执行。