一、Gerrit与Gitlab同步配置

当配置好gerrit环境后,还需要与现有gitlab库进行同步配置,否则会影响现有开发与打包流程。

1.安装gerrit replication插件

unzip gerrit.war
cp WEB-INF/plugins/replication.jar ~/temp/
ssh -p admin@172.19.16.64 gerrit plugin install -n replication.jar - <~/temp/replication.jar
ssh -p admin@172.19.16.64 gerrit plugin ls
Name Version Status File
-------------------------------------------------------------------------------
replication v2. ENABLED replication.jar

2.配置ssh config

cd ~/.ssh/
vim config
Host gitlab.***.cn
User gitlabowner
IdentityFile ~/.ssh/id_rsa #gitlab owner id_rsa
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

3.替换gitlab lubase(project owner) ssh key

cd ~/.ssh/
rm id_rsa
rm id_rsa.pub
vim id_rsa
(粘贴owner的id_rsa)
vim id_rsa.pub
(粘贴owner的id_rsa.pub)
chmod id_rsa
chmod id_rsa.pub

4.加入gitlab pubkey到kown_hosts

sh -c "ssh-keyscan -t rsa gitlab.***.cn >> ~/.ssh/known_hosts"
sh -c "ssh-keygen -H -f ~/.ssh/known_hosts"

或者

git clone git@gitlab.***.cn:mobile/***.git
Warning: Permanently added the RSA host key for IP address '172.19.14.64' to the list of known hosts.

5.配置replication.config

[remote "gitlab.***.cn"]
url = git@gitlab.***.cn:mobile/${name}.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
timtout = 30
threads = 3

6.启动replication

~/gerrit_code/bin/gerrit.sh restart
ssh -p admin@172.19.16.64 gerrit plugin reload replication
ssh -p admin@172.19.16.64 replication start ***

二、Gerrit其他配置

1.invalid committer问题

gerrit默认关闭普通用户直接push master的权限,且普通用户需要配置git config global user.email与gerrit账户信息中的email一致

由于现在无法使用email功能,可考虑关闭email功能并开启forge committer功能,或者通过gerrit数据库远程修改gerrit账户中的email信息

*采用forge committer方式

vim ~/gerrit_code/etc/gerrit.config
[sendemail]
enable = false

按照下图加入forge权限

*采用修改gerrit数据库方式

ssh -p  admin@172.19.16.64 gerrit gsql
gerrit>select * from account_external_ids;
ACCOUNT_ID | EMAIL_ADDRESS | PASSWORD | EXTERNAL_ID
-----------+----------------------------+----------+----------------------------------
| NULL | NULL | gerrit:admin
| NULL | NULL | username:admin
| NULL | NULL | gerrit:yanjunjie363
| NULL | NULL | username:yanjunjie363
gerrit>insert into account_external_ids values('', 'yanjunjie363@***.com.cn', 'NULL', 'yanjunjie363@***.com.cn');
gerrit>select * from account_external_ids;
ACCOUNT_ID | EMAIL_ADDRESS | PASSWORD | EXTERNAL_ID
-----------+----------------------------+----------+----------------------------------
| NULL | NULL | gerrit:admin
| NULL | NULL | username:admin
| NULL | NULL | gerrit:yanjunjie363
| NULL | NULL | username:yanjunjie363
| yanjunjie363@***.com.cn | NULL | mailto:yanjunjie363@***.com.cn

按照以上任意一种方式配置后,可git push origin HEAD:refs/for/master成功

2.admin remote access问题

在远程执行ssh -p 29418 admin@172.19.16.64 gerrit plugin ls时会提示报错,因为gerrit默认关闭远程admin操作权限

解决方法:

vim ~/gerrit_code/etc/gerrit.config
[plugins]
allowRemoteAdmin = true

在远程执行ssh -p 29418 admin@172.19.16.64 gerrit gsql时会提示报错,因为gerrit默认关闭操作database权限

解决方法:在Projects-Access中加入如上图中的Access Database功能

3.replication rejected问题

在执行ssh -p 29418 admin@172.19.16.64 replication start lubase时,gerrit replication日志中报错:replication_log

[-- ::,] [eb662c68] Created remote repository: git@gitlab.***.cn:mobile/All-Projects.git
[-- ::,] [eb662c68] Missing repository created; retry replication to git@gitlab.***.cn:mobile/All-Projects.git

这个问题是因为gerrit有两个默认git库All-Projects和All-Users,用来默认配置gerrit项目和账户权限,因为gitlab未开启创建git库权限,所以提示失败。

在执行ssh -p 29418 admin@172.19.16.64 replication start lubase时,gerrit replication日志中报错:replication_log

[-- ::,] [b716d4c2] Failed replicate of refs/changes/// to git@gitlab.***.cn:mobile/***.git, reason: pre-receive hook declined

这个问题是因为gitlab库权限问题导致,当***开启master protected,并使用yanjunjie363(master用户)的ssh-key push并replication时,会报该错误。

可关闭***的master protected权限,或者使用ufo(owner用户)的ssh-key push并replication即刻解决。

如果出现如下log,则表示replication插件安装成功:error_log

[-- ::,] [main] INFO  com.google.gerrit.server.plugins.PluginLoader : Loading plugins from /home/gerrit/workspaces/gerrit_code/plugins
[-- ::,] [main] WARN com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig : Config file /home/gerrit/workspaces/gerrit_code/etc/replication.config does not exist; not replicating
[-- ::,] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin replication, version v2.
[-- ::,] [main] INFO com.google.gerrit.server.change.ChangeCleanupRunner : Ignoring missing changeCleanup schedule configuration
[-- ::,] [main] INFO com.google.gerrit.sshd.SshDaemon : Started Gerrit SSHD-CORE-0.14. on *:
[-- ::,] [main] INFO org.eclipse.jetty.server.Server : jetty-9.2..v20150730
[-- ::,] [main] INFO org.eclipse.jetty.server.handler.ContextHandler : Started o.e.j.s.ServletContextHandler@{/,null,AVAILABLE}
[-- ::,] [main] INFO org.eclipse.jetty.server.ServerConnector : Started ServerConnector@189a9e6{HTTP/1.1}{0.0.0.0:}
[-- ::,] [main] INFO org.eclipse.jetty.server.Server : Started @4615ms

如果出现如下log,该表示gerrit与gitlab同步成功:replication_log

[-- ::,] [] scheduling replication ***:refs/heads/master => git@gitlab.***.cn:mobile/***.git
[-- ::,] [] scheduled ***:refs/heads/master => [9000013d] push git@gitlab.***.cn:mobile/***.git to run after 15s
[-- ::,] [9000013d] Replication to git@gitlab.***.cn:mobile/***.git started...
[-- ::,] [9000013d] Push to git@gitlab.***.cn:mobile/***.git references: [RemoteRefUpdate[remoteName=refs/heads/master, NOT_ATTEMPTED, (null)...a2e1f13bd12cd398ed45ab06fa231cac6334f0c8, srcRef=refs/heads/master, forceUpdate, message=null]]
[-- ::,] [9000013d] Replication to git@gitlab.***.cn:mobile/***.git completed in 660ms, 15000ms delay, retries

三、权限配置参考

参考链接

安装与配置gerrit replication插件

https://gerrit.libreoffice.org/plugins/replication/Documentation/config.html

https://gist.github.com/Aricg/56f1a769cbdcbb93b459

gerrit主机中加入gitlab sshkey http://www.cnblogs.com/zhanchenjin/p/5032218.html

Gerrit与Gitlab同步配置replication&其他配置的更多相关文章

  1. Gitlab Jenkins WebHook 持续集成配置踩坑记

    Jenkins相关介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 目的 配置Gitla ...

  2. MySQL主从同步、读写分离配置步骤、问题解决笔记

    MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经 ...

  3. Linux centosVMware MySQL主从介绍、准备工作、配置主、配置从、测试主从同步

    一.MySQL主从介绍 MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binl ...

  4. Mariadb之半同步复制集群配置

    首先我们来了解下在mariadb/mysql数据库主从复制集群中什么是同步,什么是异步,什么是半同步:所谓同步就是指主节点发生写操作事件,它不会立刻返回,而是等到从节点接收到主节点发送过来的写操作事件 ...

  5. .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?

    配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置:第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置.要了解配置同步机制的实现原理,先得从认识一个 ...

  6. linux下实现多台服务器同步文件(inotify-tools+rsync实时同步文件安装和配置)

    inotify-tools+rsync实时同步文件安装和配置 注:转载https://www.linuxidc.com/Linux/2012-06/63624.htm

  7. [ASP.NET Core 3框架揭秘] 配置[5]:配置数据与数据源的实时同步

    在<配置模型总体设计>介绍配置模型核心对象的时候,我们刻意回避了与配置同步相关的API,现在我们利用一个独立文章来专门讨论这个话题.配置的同步涉及到两个方面:第一,对原始的配置源实施监控并 ...

  8. gitlab docker中postgresql远程访问配置

    1.配置postgresql远程访问 配置postgresql远程访问,需要修改两个文件,在gitlab-ce的docker中位置为 /var/opt/gitlab/postgresql/data 首 ...

  9. 一文搞懂GitLab安装部署及服务配置

    GitLab安装部署 Git,GitHub,GitLab,这三个东东长得好像呀,都是个啥? Git是Linus Torvalds(如果不知道这位大神是谁,请出门左转,慢走不送~)为了帮助管理Linux ...

随机推荐

  1. angularjs里对JS的lowercase和uppercase的完善

    读angularjs的源码开头. var lowercase = function (string) { return isString(string) ? string.toLowerCase() ...

  2. js 中 substring() 和 substr() 提取字符

    提取字符串substring() substring() 方法用于提取字符串中介于两个指定下标之间的字符. 语法: stringObject.substring(startPos,stopPos)  ...

  3. .NET LINQ查询操作中的类型关系

    LINQ 查询操作中的类型关系      若要有效编写查询,您应该了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果您了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. 另外 ...

  4. Caffe初试(二)windows下的cafee训练和测试mnist数据集

    一.mnist数据集 mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60000个训练样本集和10000个测试 ...

  5. VS更改编辑窗背景

    打开Visual Studio  工具→扩展和更新→联机  在搜索框里输入“background”后,搜索结果有很多插件可以更改 Visual Studio 的背景,选择其中的一项,可以在右边进行预览 ...

  6. button按钮

    button按钮只加类名不加type时,点击此按钮页面会刷新

  7. Django【基础篇】

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. Intellij IDEA中的Mybatis Plugin破解

    具体的破解过程请看:https://github.com/luyanliang/profile/blob/master/idea/plugin/MybatisPlugin/Mybatis-Plugin ...

  9. CozyRSS开发记录5-订阅列表栏里的项

    CozyRSS开发记录5-订阅列表栏里的项 1.订阅列表栏里的项的原型图 这里列表项依然参考傲游的RSS阅读器,以后可能会微调. 2.使用ControlTemplate来定制ListBoxItem 给 ...

  10. 如何快速地从mongo中提取数据到numpy以及pandas中去

    mongo数据通常过于庞大,很难一下子放进内存里进行分析,如果直接在python里使用字典来存贮每一个文档,使用list来存储数据的话,将很快是内存沾满.型号拥有numpy和pandas import ...