尝试着在CentOS 7.6系统下面搭建gerrit服务,诸多尝试,终于顺利搭建,下面将能想起来的过程进行总结,有些可能不大准确,还请包涵。
细节这里就不详细描述了。
后面的路径就是gerrit 在电脑下载弹出的地址
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.2.2.war
sudo adduser gerrit
sudo passwd gerrit
并将gerrit加入sudo权限,修改/etc/sudoers 文件,找到下面这行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
gerrit ALL=(ALL) ALL
修改完毕,现在可以用gerrit帐号登录,然后用命令 su - ,即可获得root权限进行操作。
root帐户下安装,先创建好安装目录,如/home/gerrit/review_site,一并创建好代码存放目录,如/home/gerrit/git_repo,然后再运行具体命令,例子如下:
java -jar /home/work/download/gerrit-3.2.2.war init -d /home/gerrit/review_site
具体初始化配置选项的选择可以参考下面链接。
https://www.cnblogs.com/yinzhengjie/p/11007383.html
安装完毕,可在root帐户下运行下面的命令,修改安装目录所有者为gerrit帐户:
chown -R gerrit:gerrit /home/gerrit/review_site
切换到gerrit帐户,运行下面的的命令编辑gerrit配置文件:
vim ~/review_site/etc/gerrit.config
参考例子如下:
[gerrit]
basePath = /home/gerrit/git_repo
canonicalWebUrl = http://192.168.15.20:80/
serverId = 33af9814-8fc6-4dc7-a2ec-47f4ab7a13f0
[container]
javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
user = root
javaHome = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b03-1.el7.x86_64/jre
[index]
type = lucene
[auth]
type = HTTP
[receive]
enableSignedPush = true
[sendemail]
enable = true
smtpServer = smtp.mxhichina.com
smtpServerPort = 465
smtpEncryption = SSL
smtpUser = [email protected]
sslVerify = false
from = CodeReview
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8080/
[cache]
directory = cache
htpasswd -cb /etc/httpd/passwd admin 123456
htpasswd -b /etc/httpd/passwd tom 123456
配置完成之后,调用启动命令开启服务,相关命令可参见下面内容。
# /home/gerrit/review_site/bin/gerrit.sh start
# /home/gerrit/review_site/bin/gerrit.sh stop
# /home/gerrit/review_site/bin/gerrit.sh restart
特别说明:强烈建议server配置listen为80端口,上面gerrit配置文件中的canonicalWebUrl也相应配置为80端口,否则可能会出现一些莫名其妙的问题。
配置nginx:
vim /usr/local/nginx/conf/nginx.conf
配置文件内容例子如下:
user root;
worker_processes 1;
events {
worker_connections 1024;
}
server {
listen 80;
server_name 192.168.15.20;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
auth_basic "Gerrit Code Review";
auth_basic_user_file /etc/httpd/passwd;
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
ssh-keygen -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vvIxj5KlWfnsIE5yCqzeTSAeRtD0OarGeR+9Lv1ZA/A [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| . .. |
| o .o |
| . .. .. |
| .. o |
| .oo. S. E |
| .o=+. o+. . |
| ++o.=*Bo. o |
| .o.o**+ Xo o . |
|o. ....+*o+o |
+----[SHA256]-----+
本地gerrit系统帐户下运行下面命令配置git信息:
git config --global user.name "tom"
git config --global user.email "[email protected]"
假设在gitlab上有一个项目testrepo,则在gerrit相应创建一个testrepo项目。
在/home/gerrit/git_repo下,执行下面命令删除自动创建的目录:
sudo rm -rf testrepo.git/
重新从GitLab复制:
git clone --bare [email protected]:test/testrepo.git ./testrepo.git
通过Gerrit的replication插件来实现。
确认插件状态:已安装、已启用。
ssh -p 29418 [email protected] gerrit plugin ls |grep replication
在/home/gerrit/review_site/etc目录下创建replication.config文件用于代码同步。
特别注意:以后每创建一个新的项目,都要在该配置文件中添加对应的配置。
[remote "testrepo"]
projects = testrepo
url = [email protected]:test/testrepo.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
threads = 3
特别说明:如果不小心在配置上述内容后,又删除了对应的项目,则可能引发问题,需要先删除上述的内容,再执行恢复项目的操作。(20200824 11:01)
执行下面命令重新加载:(当前系统已经配置了私钥,并且相应公钥已经添加到了gerrit的admin帐户SSH Keys下面)
ssh -p 29418 [email protected] gerrit plugin reload replication
从testrepo项目下面SSH项下面复制完整的clone命令,然后在git bash下面执行,即可将代码克隆下来,并且生成产生COMMIT_MSG的hook。
git clone "ssh://[email protected]:29418/testrepo" && scp -p -P 29418 [email protected]:hooks/commit-msg "tom/.git/hooks/"
git push -u origin HEAD:refs/for/master
ssh -vv -p 29418 [email protected]
ssh -p 29418 [email protected] gerrit flush-caches --all
nginx -c /usr/local/nginx/conf/nginx.conf
重启服务:
service nginx restart
如果在初始化安装时,Install Verified label选项选"Y",就不用该步骤,
如果没有添加,则可以采用下面的步骤手动添加(可以查看Repositories->All-Projects->Access->Edit->Add Permission 看里面是否有Verfied的选项),确保操作前已经正确配置了admin的ssh key:
[root@centos7 ~]# git config --global user.name 'admin'
[root@centos7 ~]# git config --global user.email '[email protected]'
[root@centos7 temp]# git clone "ssh://[email protected]:29418/All-Projects"
[root@centos7 temp]# cd All-Projects/
[root@centos7 All-Projects]# vim project.config
[label "Verified"]
function = MaxWithBlock
value = -1 Fails
value = 0 No score
value = +1 Verified
[root@centos7 All-Projects]# git commit -am "Add Label Verified"
[root@centos7 All-Projects]# git push origin HEAD:refs/meta/config
如果出现服务端口不能正常访问的情况,可以优先确认一下,防火墙是否有打开,如果开了,先关闭再尝试是否恢复正常。
查看防火墙的状态的命令为:
sudo systemctl status firewalld
打开防火墙的方式有两种,一种是打开后重启会恢复回原来的状态,命令为:
sudo systemctl start firewalld
另一种是打开后重启不会恢复到原来的状态,命令为:
sudo systemctl enable firewalld
这种方式输入命令后要重启系统才会生效。
关闭防火墙的方式也有两种,和打开相对应,命令分别为
sudo systemctl stop firewalld
sudo systemctl disable firewalld
参考文档:
https://www.cnblogs.com/yinzhengjie/p/11007383.html
https://www.cnblogs.com/anliven/p/12019974.html