Gerrit作为审阅工具,而不是记录的存储库

Jon*_*n O 15 git bitbucket gerrit

我从快速入门指南中提取了一个gerrit实例.

我的公司使用BitBucket进行拉取请求,偶尔也会用于代码审查.我们使用Jenkins和BitBucket绑定的广泛构建/部署管道.

我们希望将gerrit集成到代码审查中,因为它能够在审核被接受之前进行提交并构建/验证它们.

基本上,我想让gerrit的"提交"按钮向上游推送到BitBucket.(我宁愿不通过复制来处理这个问题;我想将BitBucket维护为记录的上游/存储库,因为公司的惯性.)

有没有人对如何做到这一点有任何建议?能力是否存在,或者这是一个新颖的想法?

hel*_*ert 18

Gerrit通过在Gerrit本身托管的实际Git存储库周围提供(或多或少)瘦包装来实现它的代码审查功能.据我所知,没有可能直接在Gerrit中集成外部Git存储库.

这意味着在使用Gerrit时,Git存储库需要在Gerrit本身中托管.因此,您需要在Gerrit实例中维护BitBucket存储库的完整副本.所以这个问题基本归结为保持两个Git存储库同步.

将新提交从BitBucket同步到Gerrit

由于您已经在使用Jenkins,我建议使用Jenkins构建来在将新提交推送到BitBucket存储库时更新您的Gerrit存储库.为此,您需要:

  1. 具有直接推送功能的Gerrit用户.为此,您需要在Gerrit项目中为ref 授予Push权限refs/heads/*.Jenkins将使用此用户.注意不要将此权限授予任何最终用户,否则他们将能够通过直接推送来绕过代码审查.
  2. Jenkins作业配置为每当将新提交推送到BitBucket存储库时构建.在该作业中,只需将所有分支推送到Gerrit实例即可.
  3. 配置BitBucket服务挂钩以触发Jenkins构建(为此,您的Jenkins实例将需要公开访问;否则只需将Jenkins作业的计划设置为一个短的间隔,以最大限度地减少同步延迟).

同步从Gerrit到BitBucket的新提交

在Gerrit中提交代码评审时,需要将新提交推回到BitBucket.通常,我建议使用复制插件.以下是相应配置文件的外观(etc/replication.config在Gerrit目录中):

[remote "bitbucket"]
    url = ssh://git@bitbucket.org/<your-user>/${name}.git
    push = +refs/tags/*:refs/tags/*
    push = +refs/heads/*:refs/heads/*
    mirror = true
    replicateOnStartup = true
    replicatePermissions = false
Run Code Online (Sandbox Code Playgroud)

由于您提到要避免使用复制,因此您还可以使用Jenkins作业将Gerrit中的提交同步回BitBucket.为了最大限度地减少延迟,您可以使用JenkinsGerrit Trigger插件(无论如何,您都希望将其用于预提交检查).或者,您可以使用自定义的Gerrit钩子hooks/ref-updated来触发Jenkins构建(如果您希望我详细说明,请删除注释).

希望这可以帮助!