代码审核作为一个开源的代码审核工具,已经被许多公司投入使用,GerRit自带一个代码存储仓库,但是无法做到代码库版本管理。我们一般使用GerRit作为代码审核工具,代码版本使用Gitlab或Github。在代码提交到GerRit仓库后,我们使用Replication插件同步代码。下面就是简单GerRit服务器的搭建和部分权限管理介绍。
GerRit有三种账号管理机制,LDAP鉴权,HTTP,development_become_any_account,第三种方式管理用户最为简单,第一个登录的账号将成为管理员账号。本次安装采用HTTP方式。
本次安装采用Docker安装方式:
docker run --name gerrit1 -p 9000:8080 -p 29418:29418 -v /gerrit1/review_site:/var/gerrit/review_site --restart=always -e AUTH_TYPE=HTTP -e USER_NAME=root -e USER_EMAIL=xiaer1921@aliyun.com -e SMTP_SERVER=smtp.aliyun.com -e SMTP_SERVER_PORT=465 -e SMTP_ENCRYPTION=ssl -e SMTP_USER=xiaer1921@aliyun.com -e SMTP_CONNECT_TIMEOUT=30sec -e SMTP_FROM=USER -e SMTP_PASS=******* openfrontier/gerrit
命令包括端口映射,逻辑卷映射来保证数据持久化,配置SMTP服务。
采用HTTP方式管理账号需要设置nginx代理。
nginx代理采用Docker安装:
docker run -p 2001:80 -p 8081:8081 --name nginx -v /nginx/www/html:/www/html -v /nginx/default.conf:/etc/nginx/conf.d/default.conf -v /nginx/logs:/wwwlogs -v /nginx/DockerFile/nginx/conf/h tpasswd/gerrit.passwd:/etc/nginx/conf.d/gerrit.passwd nginx
逻辑卷映射包括网页信息,nginx配置,nginx日志信息,http代理用户信息。
修改nginx配置信息如下:
server { #config agency listen port listen port; #config agency url server_name IP; #^~ / is a way to express that url's outset is '/', just like 47.94.201.186/* location ^~ / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/gerrit.passwd; proxy_pass http://IP:port; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; } }
使用apache生成用户名和密码:
# pwd /nginx/DockerFile/nginx/conf/htpasswd # htpasswd gerrit.passwd jiche New password: Re-type new password: Adding password for user jiche
之后在账户下·保存ssh公钥,便于以后使用。GerRit所使用的ssh端口是29418。我们可以通过以下方式验证是否成功。
#ssh -T -p 29418 root@**.**.***.***
**** Welcome to Gerrit Code Review ****
Hi root, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:
git clone ssh://root@**.**.***.***:29418/REPOSITORY_NAME.git
在通过网页进入页面之后,我们可以设置账户邮箱,组和项目。
我们需要在代码文件中加入.gitreview文件,这样才能使用git review命令去提交代码到GerRit代码库。git clone代码之后加入以下代码:
$ cat .gitreview [gerrit] host=47.94.201.186 port=29418 project=maven-testng-gerrit-gitlab.git
这时候我们需要管理员权限去push 代码,命令如下:
# git push origin master
如果在设置公钥之后任然不能clone代码,请设置ssh代理,如下:
#eval "$(ssh-agent -s)" #$ssh-add
权限设置如下:
新建小组,同时使用小组对项目进行权限管理,包括代码审核机制,rebase等。如果在提交代码时出现邮箱尚未设置错误,请设置邮箱或者在用户权限中加入Forge Author Identity and Forge Committer Identity 这两个权限。
下面是在审核完成之后,我们需要同步代码到Gitlab,这时候我们需要安装Replication插件。
# find . -name "gerrit.war" ./review_site/bin/gerrit.war ./review_site/bin/gerrit_site/bin/gerrit.war [root@jiche gerrit1]# cd review_site/bin/ [root@jiche bin]# pwd /gerrit1/review_site/bin # java -jar gerrit.war init -d gerrit_site --batch --install-plugin replication Initialized /gerrit1/review_site/bin/gerrit_site # cp replication.jar /gerrit1/review_site/plugins/.
之后我们可以修改replication的配置文件来进行同步配置:
[remote "maven-testng-gerrit-gitlab"] projects = maven-testng-gerrit-gitlab url = http://user:passwd@**.**.***.***:2018/dev-group/maven-testng-gerrit-gitlab.git push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/* push = +refs/changes/*:refs/changes/* threads = 3 rescheduleDelay = 15
url 部分可以使用HTTP认证,也可以使用SSH认证,我在配置的时候出现了reject ip错误,提前设置不需要确认服务器公钥放弃安全或者是提前将公钥加入到known文件也不行,所以只能使用HTTP认证。
重新导入replication插件如下:
# ssh -p 29418 root@47.94.201.186 gerrit plugin reload replication # ssh -p 29418 root@47.94.201.186 replication start --all
查看Gitlab或者是日志来验证配置是否成功。如果配置成功,那么我们Submit将代码合并到相应分支时就会将代码同步到Gitlab仓库。