Gerrit與Gitlab同步配置replication&其他配置


一、Gerrit與Gitlab同步配置

當配置好gerrit環境后,還需要與現有gitlab庫進行同步配置,否則會影響現有開發與打包流程。

1.安裝gerrit replication插件

unzip gerrit.war
cp WEB-INF/plugins/replication.jar ~/temp/
ssh -p 29418 admin@172.19.16.64 gerrit plugin install -n replication.jar - <~/temp/replication.jar
ssh -p 29418 admin@172.19.16.64 gerrit plugin ls
Name                           Version    Status   File
-------------------------------------------------------------------------------
replication                    v2.8       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 600 id_rsa
chmod 644 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 29418 admin@172.19.16.64 gerrit plugin reload replication
ssh -p 29418 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 29418 admin@172.19.16.64 gerrit gsql
gerrit>select * from account_external_ids;
 ACCOUNT_ID | EMAIL_ADDRESS              | PASSWORD | EXTERNAL_ID
 -----------+----------------------------+----------+----------------------------------
 1000000    | NULL                       | NULL     | gerrit:admin
 1000000    | NULL                       | NULL     | username:admin
 1000005    | NULL                       | NULL     | gerrit:yanjunjie363
 1000005    | NULL                       | NULL     | username:yanjunjie363
gerrit>insert into account_external_ids values('1000005', 'yanjunjie363@***.com.cn', 'NULL', 'yanjunjie363@***.com.cn');
gerrit>select * from account_external_ids;
 ACCOUNT_ID | EMAIL_ADDRESS              | PASSWORD | EXTERNAL_ID
 -----------+----------------------------+----------+----------------------------------
 1000000    | NULL                       | NULL     | gerrit:admin
 1000000    | NULL                       | NULL     | username:admin
 1000005    | NULL                       | NULL     | gerrit:yanjunjie363
 1000005    | NULL                       | NULL     | username:yanjunjie363
 1000005    | 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

[2016-10-18 15:09:40,861] [eb662c68] Created remote repository: git@gitlab.***.cn:mobile/All-Projects.git
[2016-10-18 15:09:40,861] [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

[2016-10-17 17:26:46,210] [b716d4c2] Failed replicate of refs/changes/02/2/1 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

[2016-10-18 11:19:51,301] [main] INFO  com.google.gerrit.server.plugins.PluginLoader : Loading plugins from /home/gerrit/workspaces/gerrit_code/plugins
[2016-10-18 11:19:51,381] [main] WARN  com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig : Config file /home/gerrit/workspaces/gerrit_code/etc/replication.config does not exist; not replicating
[2016-10-18 11:19:51,383] [main] INFO  com.google.gerrit.server.plugins.PluginLoader : Loaded plugin replication, version v2.12
[2016-10-18 11:19:51,542] [main] INFO  com.google.gerrit.server.change.ChangeCleanupRunner : Ignoring missing changeCleanup schedule configuration
[2016-10-18 11:19:51,579] [main] INFO  com.google.gerrit.sshd.SshDaemon : Started Gerrit SSHD-CORE-0.14.0 on *:29418
[2016-10-18 11:19:51,581] [main] INFO  org.eclipse.jetty.server.Server : jetty-9.2.13.v20150730
[2016-10-18 11:19:51,798] [main] INFO  org.eclipse.jetty.server.handler.ContextHandler : Started o.e.j.s.ServletContextHandler@1304204{/,null,AVAILABLE}
[2016-10-18 11:19:51,800] [main] INFO  org.eclipse.jetty.server.ServerConnector : Started ServerConnector@189a9e6{HTTP/1.1}{0.0.0.0:8088}
[2016-10-18 11:19:51,801] [main] INFO  org.eclipse.jetty.server.Server : Started @4615ms

 

如果出現如下log,該表示gerrit與gitlab同步成功:replication_log

[2016-10-18 15:15:48,160] [] scheduling replication ***:refs/heads/master => git@gitlab.***.cn:mobile/***.git
[2016-10-18 15:15:48,160] [] scheduled ***:refs/heads/master => [9000013d] push git@gitlab.***.cn:mobile/***.git to run after 15s
[2016-10-18 15:16:03,160] [9000013d] Replication to git@gitlab.***.cn:mobile/***.git started...
[2016-10-18 15:16:03,161] [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]]
[2016-10-18 15:16:03,820] [9000013d] Replication to git@gitlab.***.cn:mobile/***.git completed in 660ms, 15000ms delay, 0 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM