CentOS 7 搭建gerrit服务总结

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的同步
      • 13.1 replication插件
      • 13.2 配置插件
    • 14. clone代码
    • 15.提交改动
  • 三、其他说明
    • 1.检查ssh通道方式问题出在哪里:(20200805 14:04)
    • 2.确保本地配置的git邮箱,和服务器端配置的邮箱保持一致,否则有可能无法push代码。(20200805 15:02)
    • 3.调整文件“/home/gerrit/review_site/etc/secure.config”中sendemail部分的smtpPass配置,可修改发送邮箱的密码。(20200805 17:19)
    • 4.更新gerrit缓存
    • 5.centos7卸载gerrit
    • 6.nginx操作相关
    • 7.手动添加Label Verified
    • 8.防火墙操作

一、写在前面

尝试着在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 = [email protected]
        sslVerify = false
        from = CodeReview
[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 "[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]-----+

11. 将前面生成的私钥id_rsa放到/home/gerrit/.ssh目录下,将公钥添加到gitlab对应的帐户下。

本地gerrit系统帐户下运行下面命令配置git信息:

git config --global user.name "tom"
git config --global user.email "[email protected]"

12.在Gerrit创建一个空项目并同步GitLab

假设在gitlab上有一个项目testrepo,则在gerrit相应创建一个testrepo项目。
在/home/gerrit/git_repo下,执行下面命令删除自动创建的目录:

sudo rm -rf testrepo.git/

重新从GitLab复制:

git clone --bare [email protected]:test/testrepo.git ./testrepo.git

13.配置Grerrit与GitLab的同步

13.1 replication插件

通过Gerrit的replication插件来实现。
确认插件状态:已安装、已启用。

ssh -p 29418 [email protected] gerrit plugin ls |grep replication

13.2 配置插件

在/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

14. clone代码

从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/"

15.提交改动

git push -u origin HEAD:refs/for/master

三、其他说明

1.检查ssh通道方式问题出在哪里:(20200805 14:04)

ssh -vv -p 29418 [email protected]

2.确保本地配置的git邮箱,和服务器端配置的邮箱保持一致,否则有可能无法push代码。(20200805 15:02)

3.调整文件“/home/gerrit/review_site/etc/secure.config”中sendemail部分的smtpPass配置,可修改发送邮箱的密码。(20200805 17:19)

4.更新gerrit缓存

 ssh -p 29418 [email protected] gerrit flush-caches --all

5.centos7卸载gerrit

  1. 调用命令"/home/gerrit/review_site/bin/gerrit.sh stop"停止gerrit服务;
  2. 调用命令"ps -ef | grep gerrit"确认服务已停止;
  3. 调用命令"rm -rf ~/review_site"删除相应目录;

6.nginx操作相关

  1. 首先利用配置文件启动nginx。
    命令:
nginx -c /usr/local/nginx/conf/nginx.conf

重启服务:

service nginx restart
  1. 快速停止或关闭Nginx:nginx -s stop
  2. 正常停止或关闭Nginx:nginx -s quit
  3. 配置文件修改重装载命令:nginx -s reload
  4. 查看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 '[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

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

你可能感兴趣的:(gerrit,gitlab,git,nginx,gitlab,git,linux)