一、Gerrit与Gitlab同步配置
当配置好gerrit环境后,还需要与现有gitlab库进行同步配置,否则会影响现有开发与打包流程。
1.安装gerrit replication插件
unzip gerrit.war
cp WEB-INF/plugins/replication.jar ~/temp/
ssh -p [email protected] gerrit plugin install -n replication.jar - <~/temp/replication.jar
ssh -p [email protected] 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 [email protected] gerrit plugin reload replication
ssh -p [email protected] 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 [email protected] 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 [email protected] gerrit plugin ls时会提示报错,因为gerrit默认关闭远程admin操作权限
解决方法:
vim ~/gerrit_code/etc/gerrit.config
[plugins]
allowRemoteAdmin = true
在远程执行ssh -p 29418 [email protected] gerrit gsql时会提示报错,因为gerrit默认关闭操作database权限
解决方法:在Projects-Access中加入如上图中的Access Database功能
3.replication rejected问题
在执行ssh -p 29418 [email protected] 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 [email protected] 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