gerrit和gitlab自动同步(二)

集成简介

首先我们需要清楚的知道为什么要集成gitlab或者github等仓库? 才能更好的把握gerrit的功能。
接下来将对它做一个说明:
Gerrit 本身提供 Code Review和 Git 仓库的两大功能,但实际上很多项目用的是其他的Git仓库,例如GitLab和GitHub。有时候为了使用gerrit的code review的功能不可能把原来的git仓库全部替换成gerrit的管理,这样就会随之带来很多影响及副作用。假如之前都是通过jenkins自动构建git仓的,现在要换成gerrit将会导致之前的构建全部不能够使用,这样影响面太大。那么有没有更好的做法呢,肯定是有的。
一般情况下,Gerrit位于最终代码库的前面一层,用于代码的人工审核和对CI任务的触发进行验证。即大多情况下我们只利用gerrit强大的code review的管理功能,代码仓还是其他的git仓。如此我们就面临几个问题,要搞清楚:

  • gerrit仓和其他git仓的关系?
  • gerrit仓和其他git仓怎么进行实时同步?
  • 难道要维护两个仓吗?

这里以GitLab为例,希望的愿景如下:
gerrit是建立在git版本之上的,也就是gerrit是凌驾于gitlab的。
基于此gerrit的改变是可以作用到gitlab上的,但是gitlab的变动是不能作用到gerrit上的,它们是一种管理和被管理的关系。因此它们只能是单向的同步 - gerrit->gitlab
基于这个逻辑,那么我们将gerrit和gitlab关联起来,然后只维护gerrit的仓不就同时维护了gitlab的仓库了吗,如此也就不会对之前jenkins自动构建产生影响。这个逻辑是正确的,gerrit确实也是这么做的。本章将对这个做法做一个梳理,以供实战学习和使用。

注意:

Gerrit和GitLab集成后,在Gerrit上的项目仓库有变化时,会自动同步到GitLab上对应的项目仓库中。
但Gerrit和GitLab的同步只能是单向同步(Gerrit–》GitLab),也就是说直接在GitLab上项目仓库的变动不会自动同步到Gerrit上。
因此建议在Gerrit和GitLab集成后,所有的操作都在Gerrit上完成,这一点很重要,原则上关联了gerrit的仓库是不允许直接在提交gitlab上的仓,以避免出现各自问题(造成同步或冲突等)

在开始本章前,请参阅gerrit服务器搭建和gitlab自动同步(一)章节,可以更好的了解整个过程。如果你已经熟知gerrit的搭建,可以继续往下阅读。

准备工作

  • 必须有gerrit服务器的操作权限
  • 必须有gitlab服务器的操作权限
    我们需要拿到gitlab的秘钥,并设置gerrit服务器的秘钥到gitlab服务器中。以至于两台服务器可以互相免密通信。

权限配置

1.配置gerrit访问gitlab

熟悉linux的应该知道,说白了就是将gerrit的秘钥给到gitlab。
如果不是很了解,下面将给出操作方法,一壶画瓢即可:

  • 方法一:
# 1, 登录到gerrit服务器中。
# 确认当前的目录
[gerrit@release ~]$ pwd
/home/gerrit
# 确认当前的用户是谁
[gerrit@release ~]$ whoami
gerrit
[gerrit@release ~]$ pwd
/home/gerrit
# 查看当前是否设置了秘钥, 当前已经设置过了,可以直接cat查看~/.ssh/id_rsa.pub 
# 如果没有设置过需要通过ssh-keygen设置即可, 这样将在~/.ssh/目录下生成秘钥文件
[gerrit@release ~]$ ssh-keygen -t rsa -C "youemail@xxxx.com"
gerrit@release:~/gerrit_server/review_site/etc$ ls ~/.ssh/ -l
total 28
-rw------- 1 gerrit gerrit 1679 Jun 21 08:27 id_rsa
-rw-r--r-- 1 gerrit gerrit  398 Jun 21 08:28 id_rsa.pub
# 查看秘钥并拷贝到gitlab服务器中.
[gerrit@release ~]$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCE36kKv9cRTR/UU+7c620a6sYwptzVCRa8KBWBVijXNME+te4Nt2ZKp1uVvVOYKWv4akR/E5wMMTa9sYiE7EZJsC0cfg+FSuvc7WeoyT0hWYEWAabqp1cAApZUKSm7c06829dSTAPLj4MIEQOtEzID8iaq7+kGDf6RsGF6QRrAVx28k5ZJNvNFLpFqv4cjOaDbWOKaVXkrAgYYdLWWJ6xEeQTJ6yxCkk9KY7+rHEHd9zEoJYiA03J9UgxRRkyTX8vRW39RHVVM+GriOasAgwhvhFZXJsm6mJVXr2Y3AFcMNPo4YJNq68LGdU8bjqN78ysBbkxfIDq+r3ANc7+D+Az sshtest
[gerrit@release ~]$ 
# 2, 登录到gitlab服务器中,并编辑~/.ssh/authorized_keys将gerrit服务器的秘钥粘贴到该文件中
# 如果没有该文件就创建一个
[root@tools-jenkins-gitlab002 ~]# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCE36kKv9cRTR/UU+7c620a6sYwptzVCRa8KBWBVijXNME+te4Nt2ZKp1uVvVOYKWv4akR/E5wMMTa9sYiE7EZJsC0cfg+FSuvc7WeoyT0hWYEWAabqp1cAApZUKSm7c06829dSTAPLj4MIEQOtEzID8iaq7+kGDf6RsGF6QRrAVx28k5ZJNvNFLpFqv4cjOaDbWOKaVXkrAgYYdLWWJ6xEeQTJ6yxCkk9KY7+rHEHd9zEoJYiA03J9UgxRRkyTX8vRW39RHVVM+GriOasAgwhvhFZXJsm6mJVXr2Y3AFcMNPo4YJNq68LGdU8bjqN78ysBbkxfIDq+r3ANc7+D+Az sshtest

# 3, 在登录到gerrit服务器中验证秘钥是否设置OK。
# -p 是指定ssh的访问端口, 默认是22将不用指定, 这里是1622所以通过-p指定一下
[gerrit@release ~]# ssh 192.168.1.75 -p 1622
Last failed login: Wed Jun 23 19:22:21 CST 2021 from 182.253.28.123 on ssh:notty
There were 9960 failed login attempts since the last successful login.
Last login: Mon Jun 21 17:00:59 2021 from 116.237.130.133
  ######################################################################
  #                              Notice                                #
  #                                                                    #
  #  1. Please create unique passwords that use a combination of words,#
  #   numbers, symbols, and both upper-case and lower-case letters.    #
  #   Avoid using simple adjacent keyboard combinations such as        #
  #   "Qwert!234","Qaz2wsx",etc.                                       #
  #                                                                    #
  #  2. Unless necessary, please DO NOT open or use high-risk ports,   #
  #   such as Telnet-23, FTP-20/21, NTP-123(UDP), RDP-3389,            #
  #   SSH/SFTP-22, Mysql-3306, SQL-1433,etc.                           #
  #                                                                    #
  #                                                                    #
  #                     Any questions please contact 4000-955-988      #
  ######################################################################

[root@tools-jenkins-gitlab002 ~]## pwd
/root
[root@tools-jenkins-gitlab002 ~]## whoami
root
[root@tools-jenkins-gitlab002 ~]# exit
logout
[gerrit@release ~]$
  • 方法二,以上ssh提供了一个命令一键拷贝,效果也是一样的
# 在这里按照方法一中,创建gerrit服务器秘钥之后,接着执行以下指令即可:
# 在执行以下指令后,也需要输入gitlab的密码
[gerrit@release ~]$ ssh-copy-id root@192.168.1.75
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@tools-jenkins-gitlab002's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.1.75'"
and check to make sure that only the key(s) you wanted were added.

[root@release ~]# 
# 然后通过ssh 登录验证是否ok,同上ssh 192.168.1.75 -p 1622

2.配置gitlab访问gerrit

配置gerrit访问gitlab完成后,这一步实际就是相反的操作, 即将gitlab的秘钥拷贝给gerrit服务器进行免密登录。
下面将给出操作方法,一壶画瓢即可:

# 1. 登录到gitlab服务器
# 确认是否存在秘钥,如果不存在通过ssh-keygen -t rsa -C "youemail@xxx.com"生成
[root@tools-jenkins-gitlab002 ~] cat ~/.ssh/id_rsa.pub
# 拷贝秘钥到gerrit服务器中
[root@tools-jenkins-gitlab002 ~] ssh-copy-id gerrit@10.66.210.123
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/gerrit/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
gerrit@release's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'gerrit@10.66.210.123'"
and check to make sure that only the key(s) you wanted were added.

[root@tools-jenkins-gitlab002 ~] 

3.设置gerrit同步gitlab的配置文件

该步骤也是很关键,需要在该配置文件中指定gitlab服务器相关信息,否则将会同步失败。

# 1, 登录到gerrit服务器中操作
# 创建config文件
vi ~/.ssh/config
# 指明gitlab的地址
HOST 119.3.60.xxx
    User root    #gitlab服务器用户名
    Port 1622    # gitlab 访问端口, 如果默认22 将不用添加该项
    IdentityFile ~/.ssh/id_rsa     # 秘钥在服务器的路径
    PreferredAuthentications publickey  # 首选认证方式
# 保存即可

4.配置秘钥

该步骤,需要将上述gerrit生成秘钥放到对应的gitlab公钥配置中。
什么意思呢?
首先, 将上述gerrit生成的公钥id_rsa.pub内容拷贝放到gitlab的SSH Key配置中:
在这里插入图片描述

5.replication配置设置

Replication插件
如果想要将Gerrit上的改动自动同步到GitLab上,就需要用到Gerrit的Replication插件。
Replication 插件可以同时对接已有的 Git 仓库系统,通常用于提供 changes 的镜像或者热备份,自动地将 Gerrit Code Review创建的任何改动 push 到另外一个系统里。

  • 这一步很重要,该步骤放到后面,请继续参阅下面章节自动同步项目->replication插件配置小节

创建项目

经过以上几小节的设置,已经具备同步项目的基础条件。以后将不用在进行设置了。
接下来,我们将学习如果同步gitlab的项目,并通过gerrit自动同步修改。

1.创建一个gitlab的项目

大多情况下,我们都是希望将gitlab现有的一个或几个项目加入到gerrit中进行管理。
我们假设gitlab中已经存在了一个项目tinyalsa,并希望该项目可以被gerrit进行管理, 我们只需要记住该项目的 名称即可 - tinyalsa

注意

如果gitlab没有项目,请自行创建一个测试项目, 在此就不在演示,不会的可以自行搜索学习

2.创建一个gerrit的项目

1, 在这里我们需要通过gerrit创建一个和gitlab中名称一样的项目 - tinyalsa
在这里插入图片描述2, 点击CREATE NEW创建项目

在这里插入图片描述3, 点击CREATE, 这里Repository中一定要填写和gitlab相同的项目名称 - tinyalsa

在这里插入图片描述4, 项目创建成功,并显示了clone代码的命令提示

在这里插入图片描述在此gerrit中创建项目就完成了,那么创建的这个tinyalsa的项目在gerrit中什么位置吗?
还记得我们在安装gerrit的时候,要我们设置的Repository的位置目录吗, 它就是放置我们项目的目录,我们进入查看一下:

# 我们指定的仓库目录为~/repositories
gerrit@release:~/gerrit_server/review_site/etc$ ls ~/repositories/
All-Projects.git  All-Users.git  tinyalsa.git
gerrit@release:~/gerrit_server/review_site/etc$

是不是有一个tinyalsa.git的一个目录呢, 这就是我们gerrit创建时自动生成项目仓库

注意

该目录下还有两个All-Projects.git All-Users.git目录,在安装gerrit的时候自动生成的,很重要,不要动,这是gerrit权限管理文件
很重要
很重要
很重要的!!!

3.克隆gitlab中tinyalsa项目

以上小节已经在gerrit中创建了tinyalsa的项目,其实他只是一个空仓:
Repositories->tinyalsa->Branches->browes查看是没有任何文件的。

那么如何才能将它与gitlab进行关联呢?
接下来我们就将实现它:

# 进入gerrit版本仓目录
cd ~/repositories
# 删除gerrit自动生成的tinyalsa.git目录, 该目录其实就是一个空仓
rm -rf tinyalsa.git
# 拉取gitlab的tinyalsa项目, 需要指定--bare进行独立拉取以便脱离远程分支
git clone --bare ssh://git@119.3.60.230:1622/gm_aosp/aosp/external/tinyalsa.git
# 这样在通过Repositories->tinyalsa->Branches->browes查看是不是就有了,内容和gitlab的是不是一样的

查看分支
在这里插入图片描述查看code review, 是不是都有内容了
在这里插入图片描述

自动同步项目

接下来就是最重要的,如何将gerrit项目tinyalsa的修改自动的同步到gitlab对应的项目tinyalsa呢?

1.replication插件配置

上文提到的replication插件配置就是做这个的。
如何配置呢?
首先需要先安装replication插件, 当前gerrit在安装的时候都自动安装了,无需手动安装。
也可以通过BROWES->plugin进行查看确认是否已经安装:

在这里插入图片描述
然后我们需要创建一个~/gerrit_server/review_site/etc/replication.config文件进行指定tinyalsa同步gitlab对应的项目

[remote "tinyalsa"]		# 项目名称要一致
        rescheduleDelay = 15

        projects = tinyalsa  # 项目名称要一致

        url = ssh://git@119.3.60.xxx:1622/gm_aosp/aosp/external/tinyalsa.git   # gitlab的仓地址

        push = +refs/heads/*:refs/heads/*

        push = +refs/tags/*:refs/tags/*

        push = +refs/changes/*:refs/changes/*

        threads = 3

保存退出, 并重启

~/gerrit_server/review_site/bin/gerrit.sh restart

2.gerrit拉取并修改同步项目

前面已经做了那么多, 最关键的目的来了。拉取代码并修改提交。
我们通过页面登录到gerrit后,找到tinyalsa项目, 已经告诉我们拉取方式了。当前我们先选择第二种:

# 创建一个test目录
gerrit@release:~$ mkdir gerrit_test
gerrit@release:~$ cd gerrit_test/
# 拉取代码
gerrit@release:~$ git clone "ssh://gerrit@10.66.210.89:29418/tinyalsa"
Cloning into 'tinyalsa'...
remote: Counting objects: 572, done
remote: Finding sources: 100% (572/572)
remote: Total 572 (delta 195), reused 572 (delta 195)
Receiving objects: 100% (572/572), 287.19 KiB | 11.04 MiB/s, done.
Resolving deltas: 100% (195/195), done.
gerrit@release:~/gerrit_test$
gerrit@release:~/gerrit_test$ ls
tinyalsa
gerrit@release:~/gerrit_test$

这里代码就拉取到本地了, 接着我们进行修改:

# 进入tinyalsa项目目录
gerrit@release:~/gerrit_test$ cd tinyalsa/
gerrit@release:~/gerrit_test/tinyalsa$ ls
Android.bp  MODULE_LICENSE_BSD  NOTICE  README  include  mixer.c  pcm.c  tinycap.c  tinyhostless.c  tinymix.c  tinypcminfo.c  tinyplay.c
gerrit@release:~/gerrit_test/tinyalsa$
gerrit@release:~/gerrit_test/tinyalsa$ vi README
# 修改README增加  'test gerrit modify by sven'
gerrit@release:~/gerrit_test/tinyalsa$ git diff README
diff --git a/README b/README
index 2f8afb0..4671c68 100644
--- a/README
+++ b/README
@@ -11,3 +11,4 @@ The aims are:
 - test new gerrit 9 test user2
  add code-review test abandone
  add submit is not ready test
+ test gerrit modify by sven
gerrit@release:~/gerrit_test/tinyalsa$
# 将改动的文件加入到git中
gerrit@release:~/gerrit_test/tinyalsa$ git add README
# 提交到git仓工作区中
gerrit@release:~/gerrit_test/tinyalsa$ git commit -m "test gerrit sync gitlab"
[master 908a674] test gerrit sync gitlab
 1 file changed, 1 insertion(+)
# 推送到远程仓库中
gerrit@release:~/gerrit_test/tinyalsa$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 48 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 323 bytes | 323.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2)
remote: Processing changes: refs: 1, done
To ssh://10.66.210.89:29418/tinyalsa
   eb99b3a..908a674  master -> master
gerrit@release:~/gerrit_test/tinyalsa$

以上步骤是不是很熟悉,对了完全是git的基本用法,通过上面的操作我们已经将修改的文件上传到了gerrit同时自动同步到了gitlab的远程服务器。

  • 然后通过gerrit页面确认是否已经被正确提交到gerrit tinyalsa仓库中了, 通过查看确实已经有了提交记录如下图:

在这里插入图片描述在这里插入图片描述

  • 那么gitlab是否也基于同步了呢, 通过gitlab的页面查看确实也同步了,如下图所示:

在这里插入图片描述在这里插入图片描述
是不是很神奇,和我们预想的完全一样,这样我们就只维护gerrit服务器一份就同时维护了gitlab的对应项目了

总结

  • 1.以上提到的权限配置 (1-3点),只是在搭建gerrit和gitlab互相通信时做一次配置即可,以后无需再进行配置
  • 2.replication插件配置需要根据具体的项目进行修改~/gerrit_server/review_site/etc/replication.config
    也就是说在gerrit创建一个对应的gitlab项目时,就需要在该配置文件中增加对应的项目节点。
  • 3.客户端在拉取gerrit代码仓时走ssh协议时,都需要将公钥加入到对应的gerrit用户的设置SSH Key中, 否则在拉取时会报**Permission denied (publickey).**权限问题
# 因为没有将客户端的秘钥增加到gerrit用户设置中
gerrit@release:~/gerrit_test$ git clone "ssh://gerrit@10.66.210.89:29418/tinyalsa"
Cloning into 'tinyalsa'...
The authenticity of host '[10.66.210.89]:29418 ([10.66.210.89]:29418)' can't be established.
ECDSA key fingerprint is SHA256:NZ85Gw0Rw51zs4UWb5lYpmKrSblhpCdybuCkqBoqXAo.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[10.66.210.89]:29418' (ECDSA) to the list of known hosts.
gerrit@10.66.210.89: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
gerrit@release:~/gerrit_test$

在这里插入图片描述

  • 4.根据以上的步骤权限配置之后,发现不能自动同步到gitlab远程仓,提示:
    Cannot replicate to ssh xxxxx
    xxxx invalid privatekey: [B@16b1cf6d
    这样的问题

这是因为秘钥版本过高导致,也就是说gitlab通过ssh-keygen的版本较低, 而gerrit通过的ssh-keygen的版本较高引起的不匹配问题。

[2021-06-21 07:38:50,722] [ace5459f] Replication to ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git started...
[2021-06-21 07:38:50,723] [ace5459f] Push to ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git references: [RemoteRefUpdate[remoteName=refs/heads/master, NOT_ATTEMPTED, (null)...c7d81577da3a9bdea30b9f710d5cfd229d31a99b, srcRef=refs/heads/master, forceUpdate, message=null]]
[2021-06-21 07:38:50,723] [ace5459f] Cannot replicate to ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git
org.eclipse.jgit.errors.TransportException: ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git: invalid privatekey: [B@16b1cf6d
        at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:191)
        at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:140)
        at org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init>(TransportGitSsh.java:339)
        at org.eclipse.jgit.transport.TransportGitSsh.openPush(TransportGitSsh.java:176)
        at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:160)
        at org.eclipse.jgit.transport.Transport.push(Transport.java:1346)
        at org.eclipse.jgit.transport.Transport.push(Transport.java:1392)
        at com.googlesource.gerrit.plugins.replication.PushOne.pushVia(PushOne.java:462)
        at com.googlesource.gerrit.plugins.replication.PushOne.runImpl(PushOne.java:432)
        at com.googlesource.gerrit.plugins.replication.PushOne.runPushOperation(PushOne.java:316)
        at com.googlesource.gerrit.plugins.replication.PushOne.lambda$run$0(PushOne.java:282)
        at com.google.gerrit.server.util.RequestScopePropagator.lambda$cleanup$1(RequestScopePropagator.java:182)
        at com.google.gerrit.server.util.RequestScopePropagator.lambda$context$0(RequestScopePropagator.java:170)
        at com.google.gerrit.server.git.PerThreadRequestScope$Propagator.lambda$scope$0(PerThreadRequestScope.java:70)
        at com.googlesource.gerrit.plugins.replication.PushOne.run(PushOne.java:285)
        at com.google.gerrit.server.logging.LoggingContextAwareRunnable.run(LoggingContextAwareRunnable.java:72)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:610)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@16b1cf6d
        at com.jcraft.jsch.KeyPair.load(KeyPair.java:664)
        at com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
        at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
        at com.jcraft.jsch.JSch.addIdentity(JSch.java:407)
        at com.jcraft.jsch.JSch.addIdentity(JSch.java:367)
        at org.eclipse.jgit.transport.JschConfigSessionFactory.getJSch(JschConfigSessionFactory.java:399)
        at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:335)
        at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:208)
        at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:138)
        ... 23 more
[2021-06-21 07:39:50,724] [ace5459f] Replication to ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git started...
[2021-06-21 07:39:50,725] [ace5459f] Push to ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git references: [RemoteRefUpdate[remoteName=refs/heads/master, NOT_ATTEMPTED, (null)...c7d81577da3a9bdea30b9f710d5cfd229d31a99b, srcRef=refs/heads/master, forceUpdate, message=null]]
[2021-06-21 07:39:50,725] [ace5459f] Cannot replicate to ssh://git@119.3.xx.xx:1622/gm_aosp/aosp/external/tinyalsa.git

解决办法就是: 降低gerrit服务器ssh-keygen的版本,或者将gitlab的秘钥直接拷贝到gerrit的~/.ssh/目录中即可。
我用的是第二种方式,直接将秘钥复制到gerrit服务器中。

  • 5.如果gitlab和gerrit服务器直接没有做免密设置,也会发送不能自动同步问题,具体日志可以查看
    ~/gerrit_server/review_site/logs/replication_log

该章节主要梳理了搭建完gerrit服务器后,怎么才可以与gitlab进行同步的方法。这也是最基本的诉求,其中并没有涉及到代码如何管理、如何review审核、权限如何设置等在工作开发中实实在在要用到的功能。

正所谓:工欲善其事,必先利其器 只有基础工作做准备好了 才可以更好的理解和使用之 。

请看下一章节gerrit邮箱设置

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值