CentOS 7 搭建gerrit服务总结
- 一、写在前面
- 二、具体步骤
- 1. 先下载安装jdk
- 2. 下载gerrit
- 3. 为gerrit创建单独操作系统帐号,用来管理gerrit,具体操作如下:
- 4. 安装gerrit 配置gerrit配置
- 5. 编辑配置文件(根据实际情况进行调整)
- 6. root帐户下添加gerrit用户,可以添加多个,这个用户是作为web页面的登陆用户使用的,下面第一行命令,创建文件并添加管理员帐户,第二行命令,创建一个普通用户:
- 7.root帐户下启动、关闭、重启gerrit
- 8.配置反向代理服务(Nginx)
- 9.访问: http://192.168.15.20 ,用admin用户登录
- 10.使用ssh-keygen生成密钥对,后续需要用到
- 11. 将前面生成的私钥id_rsa放到/home/gerrit/.ssh目录下,将公钥添加到gitlab对应的帐户下。
- 12.在Gerrit创建一个空项目并同步GitLab
- 13.配置Grerrit与GitLab的同步
- 14. clone代码
- 15.提交改动
- 三、其他说明
一、写在前面
尝试着在CentOS 7.6系统下面搭建gerrit服务,诸多尝试,终于顺利搭建,下面将能想起来的过程进行总结,有些可能不大准确,还请包涵。
二、具体步骤
1. 先下载安装jdk
细节这里就不详细描述了。
2. 下载gerrit
后面的路径就是gerrit 在电脑下载弹出的地址
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.2.2.war
3. 为gerrit创建单独操作系统帐号,用来管理gerrit,具体操作如下:
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权限进行操作。
4. 安装gerrit 配置gerrit配置
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
5. 编辑配置文件(根据实际情况进行调整)
安装完毕,可在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 = myemail@company.com
sslVerify = false
from = CodeReview<myemail@company.com>
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8080/
[cache]
directory = cache
6. root帐户下添加gerrit用户,可以添加多个,这个用户是作为web页面的登陆用户使用的,下面第一行命令,创建文件并添加管理员帐户,第二行命令,创建一个普通用户:
htpasswd -cb /etc/httpd/passwd admin 123456
htpasswd -b /etc/httpd/passwd tom 123456
7.root帐户下启动、关闭、重启gerrit
配置完成之后,调用启动命令开启服务,相关命令可参见下面内容。
# /home/gerrit/review_site/bin/gerrit.sh start
# /home/gerrit/review_site/bin/gerrit.sh stop
# /home/gerrit/review_site/bin/gerrit.sh restart
8.配置反向代理服务(Nginx)
特别说明:强烈建议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;
}
}
9.访问: http://192.168.15.20 ,用admin用户登录
10.使用ssh-keygen生成密钥对,后续需要用到
ssh-keygen -C "tom@company.com"
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 tom@company.com
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]-----+
11. 将前面生成的私钥id_rsa放到/home/gerrit/.ssh目录下,将公钥添加到gitlab对应的帐户下。
本地gerrit系统帐户下运行下面命令配置git信息:
git config --global user.name "tom"
git config --global user.email "tom@company.com"
12.在Gerrit创建一个空项目并同步GitLab
假设在gitlab上有一个项目testrepo,则在gerrit相应创建一个testrepo项目。
在/home/gerrit/git_repo下,执行下面命令删除自动创建的目录:
sudo rm -rf testrepo.git/
重新从GitLab复制:
git clone --bare git@192.168.15.202:test/testrepo.git ./testrepo.git
13.配置Grerrit与GitLab的同步
13.1 replication插件
通过Gerrit的replication插件来实现。
确认插件状态:已安装、已启用。
ssh -p 29418 admin@192.168.15.20 gerrit plugin ls |grep replication
13.2 配置插件
在/home/gerrit/review_site/etc目录下创建replication.config文件用于代码同步。
特别注意:以后每创建一个新的项目,都要在该配置文件中添加对应的配置。
[remote "testrepo"]
projects = testrepo
url = git@192.168.15.202: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 admin@192.168.15.20 gerrit plugin reload replication
14. clone代码
从testrepo项目下面SSH项下面复制完整的clone命令,然后在git bash下面执行,即可将代码克隆下来,并且生成产生COMMIT_MSG的hook。
git clone "ssh://tom@192.168.20.15:29418/testrepo" && scp -p -P 29418 tom@192.168.20.15:hooks/commit-msg "tom/.git/hooks/"
15.提交改动
git push -u origin HEAD:refs/for/master
三、其他说明
1.检查ssh通道方式问题出在哪里:(20200805 14:04)
ssh -vv -p 29418 admin@192.168.15.20
2.确保本地配置的git邮箱,和服务器端配置的邮箱保持一致,否则有可能无法push代码。(20200805 15:02)
3.调整文件“/home/gerrit/review_site/etc/secure.config”中sendemail部分的smtpPass配置,可修改发送邮箱的密码。(20200805 17:19)
4.更新gerrit缓存
ssh -p 29418 admin@192.168.15.20 gerrit flush-caches --all
5.centos7卸载gerrit
- 调用命令"/home/gerrit/review_site/bin/gerrit.sh stop"停止gerrit服务;
- 调用命令"ps -ef | grep gerrit"确认服务已停止;
- 调用命令"rm -rf ~/review_site"删除相应目录;
6.nginx操作相关
- 首先利用配置文件启动nginx。
命令:
nginx -c /usr/local/nginx/conf/nginx.conf
重启服务:
service nginx restart
- 快速停止或关闭Nginx:nginx -s stop
- 正常停止或关闭Nginx:nginx -s quit
- 配置文件修改重装载命令:nginx -s reload
- 查看nginx日志:
/var/logs/nginx-access.log
7.手动添加Label Verified
如果在初始化安装时,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 'admin@company.com'
[root@centos7 temp]# git clone "ssh://admin@192.168.20.15: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
8.防火墙操作
如果出现服务端口不能正常访问的情况,可以优先确认一下,防火墙是否有打开,如果开了,先关闭再尝试是否恢复正常。
查看防火墙的状态的命令为:
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