docker笔记4--配置gerrit

docker笔记4--配置gerrit


gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。它分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android计划而产生。gerrit同gitlab、github一样可以用于团队管理项目代码和文档,相对于gitlab更加轻量,其运行时所消耗资源较少。


1、安装方法

1)下载gerrit docker镜像

docker pull openfrontier/gerrit

2)新建本地目录用于存放gerrit产生的数据,如gerrit_volume

mkdir gerrit_volume

3)配置docker http启动命令

启动目录下(建议将该配置写到shell脚本中):

docker run \
--name mygerrit \
-v $PWD/gerrit_volume:/var/gerrit/review_site \
-p 8091:8091 -p 29418:29418 \
-e USER_NAME=yourName \
-e [email protected] \
-e AUTH_TYPE=HTTP \
-e SMTP_SERVER=smtp.163.com \
-e SMTP_SERVER_PORT=465 \
-e SMTP_ENCRYPTION=ssl \
-e [email protected] \
-e SMTP_CONNCT_TIMEOUT=30sec \
-e SMTP_FROM=USER \
-e SMTP_PASS=yourPassword \
-d openfrontier/gerrit

其中8091为web访问端口,29418为ssh端口,执行该命令后review_site 总的内容将和gerrit_volume中内容同步;

笔者使用163邮箱,需要注意的是465和ssl,SMTP_PASS是开通SMTP时候设置的密码(不一定和邮箱的登录密码相同);

gerrit_volume中会产生一个gerrit.config (位置 gerrit_volume/etc/gerrit.config)的配置文件内容,该内容可以根据需要修改,笔者主要配置内容如下:

[gerrit]
  basePath = git
  serverId = 0871a228-bd59-4f69-a8b9-504f65b6ddb6
  canonicalWebUrl = http://yourIP:8091/
[auth]
  type = HTTP
  gitBasicAuthPolicy = HTTP
[sshd]
  listenAddress = *:29418
[httpd]
  listenUrl = http://*:8091/

默认生成的canoicalWebUrl是个乱码,必须要修改为自己的宿主机IP,否则 注册邮箱的时候,发送的验证位置前部分就是一个乱码WebUrl;

注意:使用shell脚本的时候,gerrit_volume需要和shell脚本在同一级目录中

4)配置Nginx代理

笔者的Nginx为docker版本的,相关内容包括启动命令和配置文件,如下所示:

启动命令(建议写到shell脚本中):

docker run \
-p 80:80 -p 8081:8081 \
--name mynginx \
-v $PWD/www/html:/www/html \
-v $PWD/default.conf:/etc/nginx/conf.d/default.conf \
-v $PWD/logs:/wwwlogs \
-v /home/xg/DockerFile/nginx/conf/htpasswd/gerrit.passwd:/etc/nginx/conf.d/gerrit.passwd \
-d nginx

笔者 $PWD/www/html、$PWD/default.conf、$PWD/logs、/home/xg/DockerFile/nginx/conf/htpasswd/gerrit.passwd 依次存放个人主页信息、nginx配置、nginx日志信息、gerrit http代理用户信息,搭建个人主页方法可以参考笔者博文 docker笔记1--配置nginx服务器:https://blog.csdn.net/u011127242/article/details/79603341,8081为gerrit的代理端口。

配置文件中,gerrit代理信息如下:

server {
      listen 8081;
      server_name yourIP;

      location ^~ / {
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/conf.d/gerrit.passwd;
        proxy_pass        http://yourIP:8091;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  Host $host;
      }
    }

5)安装apache2 以生成用户名称和密码信息

sudo apt-get install apache2

在/home/xg/DockerFile/nginx/conf/htpasswd对应的目录执行如下命令添加admin用户或其它用户,用于登录gerrit


后续添加用户的时候直接在对应目录执行 htpasswd gerrit.passwd Username即可

6)启动Nginx服务器和gerrit后,输入

ip:8081即可登录gerrit,如下图为登录界面,需要输入gerrit.passwd中的用户名和密码,默认第一个登录的用户为管理员,其对应的Account ID 为 1000000


主界面如下:


初次登录后,既可以用nginx中的端口8081,也可以用gerrit中的端口8091.

7)安装注意事项

如果没有做nginx代理,那么会出现如下提示:

Check the HTTP server's authentication settings.
The HTTP server did not provide the username in the Authorization header when it forwarded the request to Gerrit Code Review.
If the HTTP server is Apache HTTPd, check the proxy configuration includes an authorization directive with the proper location, ensuring it ends with '/':

<VirtualHost yourIP:8091>
    ServerName yourIP
    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On
    <Proxy *>
          Order deny,allow
          Allow from all
    </Proxy>
    <Location /login/>
      AuthType Basic
      AuthName "Gerrit Code Review"
      Require valid-user
      ...
    </Location>
    AllowEncodedSlashes On
    ProxyPass / http://.../ nodecode
</VirtualHost>

因此需要使用apache或者nginx代理,笔者感觉nginx配置较简单,因此推荐使用nginx。

步骤3)中的type也可以使用 DEVELOPMENT_BECOME_ANY_ACCOUNT或者OAUTH等类型,若使用DEVELOPMENT_BECOME_ANY_ACCOUNT,gerrit启动后最右边将出现一个become按钮,即每个用户都可以新建用户,也可以用管理员用户登录,非常不安全,只适合个人开发测试时候使用,不可用于企业开发。

docker安装步骤和镜像网址:https://hub.docker.com/r/openfrontier/gerrit/


2、常用功能

2.1、配置ssh

初次使用的时候,git clone  ssh://yourName@yourIP:29418/yourProject.git,会出现如下报错:


即:没有访问权限,因此需要通过ssh配置公钥和私钥,使PC有使用权限,配置方法如下:

1)设置用户名和邮箱

git config --global user.name "yourName"

git config --global user.email "yourEmail"

2)生成公钥私钥

ssh-keygen -t rsa -C "yourEmail"

连续三次回车键,会在C:\User\用户名\.ssh下生成公钥id_rsa.pub 和私钥 id_rsa,其中公钥需要添加到gerrit的SSH Public Keys中

3)进入Settings-->SSH Public Keys-->Add Key位置,将id_rsa.pub中的所有内容拷贝到对应位置,如下图:


4)添加完成后就可以正确执行git clone命令,只要不删除更改.ssh文件夹中的内容就可以一次设置长期使用了

2.2、普通用户无访问权限问题

笔者gerrit有两个用户,第一个为系统管理员A,第二个为普通用户B,A创建了一个项目后未做任何权限相关操作,B访问该项目的时候出现Not Found,查阅资料后发现项目管理员需要添加B用户对该项目的read权限。gerrit项目的权限以group为单位,管理员对group设置权限后,group内的所有用户都有相应的权限,因此需要先创建1个group,然后将相应用户都加入到该group中,最后给该group添加该项目的各类权限。具体步骤如下:

1)用户A创建名称为Xgroup的group,A-->People-->CreateNewGroup,在Members中添加B用户(需要通过注册邮件的方式注册用户信息),General中默认Owners为该group的名称,这会导致所有组员都可以增删用户信息,很明显不合适,因此考虑使用Administrators作为Owners,添加后保存即可。

2)A在Projects的List中找到创建的项目,通过Access进入项目权限管理界面,为Xgroup 的Reference: refs/meta/config添加Read权限,保存后B用户就可以访问A创建的该新目录了,如下图:


3)通过1)、2)可以使B正常访问项目,但是git clone 后git push -u提交信息的时候出现如下错误: ! [remote rejected] master -> master (prohibited by Gerrit: ref update access d  enied),即为无push权限,此时需要同2)一样添加Push,其中Reference:使用默认的refs/heads/*即可,保存后Xgroup内的成员就可以push到gerrit了


3、说明

截图系统版本:腾讯云 Ubuntu 16.04 Server (64-bit)

其中gerrit和nginx都使用docker部署

猜你喜欢

转载自blog.csdn.net/u011127242/article/details/79966978
4--
今日推荐