gerrit服务器搭建和gitlab自动同步(一)
gerrit服务器搭建和gitlab自动同步gerrit简介和gitlab的区别gerrit安装准备gerrit服务器安装gerrit配置和代理设置gerrit简介在gerrit搭建之前我们先了解一下gerrit的作用,以至于我们可以更好的理解它与其他git版本库的区别。代码审查对不同的人意味着不同的东西。对一些人来说,这是一次与设计师或一个团队一行一行过代码的正式会议。对其他人来说,就是在提交代
gerrit服务器搭建和gitlab自动同步
gerrit简介
在gerrit搭建之前我们先了解一下gerrit的作用,以至于我们可以更好的理解它与其他git版本库的区别。
代码审查对不同的人意味着不同的东西。对一些人来说,这是一次与设计师或一个团队一行一行过代码的正式会议。对其他人来说,就是在提交代码之前,让别人浏览一下代码。
Gerrit的目的就是为代码提交到代码库之前提供一个评审的轻量级框架。代码提交到Gerrit上之后,实际上并没有真正被项目接受,直到被评审通过。
Gerrit在代码被正式接受之前,为代码检查设置了一个staging area,在这里可以对该提交进行修改、讨论、增加注释……
分布式进行、不需要面对面操作
对比gitlab的区别
gitlab的特点
- 是一个人维系一个分支。
- 提供了比较多的选择,可以根据需要创建project,每个团队可以根据自己的需求管理自己的代码,方式更加的灵活。
- 是以merge request作为一次review,merge request中可能包含多个 commit,如果review不通过也不需要发起另一次merge request。
- 可以选择公开代码,团队间可以看到互相的代码,有利于团队的协作。
- 可以提供issues,wiki等功能方便开发者与使用者之间的沟通,并且gitlab可以无缝的与一些项目管理工具集成,比如:jira,repo。
gerrit的特点
- 是一个团队维系一个分支。(这里的分支对应一个业务需求)
- 比较单一,而且权限配置比较复杂,往往都是要联系管理员做出修改,每个团队很难做到对代码的个性化管理。
- 是以commit作为一次review,由于changeId的存在,可以对一次commit反复的进行review。
如果task划分的粒度够细的话,并不会影响各个团队的review习惯。 - 由于权限控制问题,只能在权限范围内公开代码。
- 这个方面比较欠缺。
总结
gerrit作为谷歌管理安卓项目的版本管理工具还是有其优点的,
多部门之间的权限隔离,强制review的机制都是其优点,
反观gitlab作为github的开源版,遵循了一套开源的流程,比较符合大多数人得习惯。
所以,通过比较,推荐使用gitlab作为版本管理工具,并且不与gerrit做集成。
gerrit安装准备
- Ubuntu Server 21.04
- OpenJdk8
- Nginx
- apache2-utils
- gerrit
1.Ubuntu Server 21.04
首先选择安装的服务器,在此以Ubuntu server21.04为例,当然你们也可以选择桌面版。具体安装自行查阅。
服务器准备好之后,我们最好创建一个专有用户运行gerrit服务。 在此我们单独创建了gerrit用户:
sudo adduser gerrit # 创建gerrit用户
sudo usermod -aG sudo gerrit # 赋予sudo管理权限
su gerrit # 切换到gerrit用户
2.OpenJdk8
其次,需要安装jdk,在gerrit运行的时候需要jdk8支持, 有的gerrit版还需要安装更高版本的jdk。所以需要安装jdk8及更高级别的jdk才行。 在这里我们下载的gerrit是3.0.0版本,因此jdk8就已经全部支持安装和运行了。
sudo apt install -y openjdk-8-jdk
注意
对应gerrit-3.3.0以上版本好像需要安装jdk8及jdk8以上的更高级别的。
高级别的jdk是用于安装gerrit负责会报错,jdk8只负责运行gerrit。
3.Nginx安装
nginx服务用于代理访问gerrit的管理服务,用于用户访问gerrit的入口。
sudo apt install -y nginx
4.apache2-utils
安装Apache工具用于添加gerrit用户
sudo apt install -y apache2-utils
5.gerrit下载
gerrit的下载链接,里面有很多版本,在此我们选择的版是gerrit-3.0.0.war
下载如下:
# 创建gerrit_server目录
mkdir ~/gerrit_server
# 进入该目录
cd gerrit_server
# 下载gerrit-3.0.0.war
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.0.0.war
ls
gerrit@release:~/gerrit_server$ ls -l
total 216304
-rw-r--r-- 1 gerrit gerrit 68714982 Jun 11 08:32 gerrit-3.0.0.war
gerrit@release:~/gerrit_server$
gerrit服务器安装
以上准备工作都完成之后,接下来将正式开始安装gerrit的服务了。
# 安装之前先创建一个存放git的仓库目录,如果不创建的话将会默认到gerrit安装目录中,
# 个人习惯将安装目录和仓库目录分开放
mkdir ~/repositories
# gerrit安装
# -d 后面是指定gerrit将要安装到哪个位置,需要指定一个目录
java -jar gerrit*.war init -d review_site
执行上面命令后,将会输出以下配置信息:
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2021-06-23 14:49:12,928] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /home/user/gerrit_server/gerrit.mydomain.com/etc/gerrit.config; assuming defaults
*** Gerrit Code Review 3.0.0***
*** Git Repositories***
// 设置gerrit仓库目录, 即上面创建的repositories目录
Location of Git repositories [git]: /home/gerrit/repositories
*** Index***
Type [lucene/?]: lucene
*** User Authentication***
// 设置为http认证模式
Authentication method [openid/?]: http
Get username from custom HTTP header [y/N]?
SSO logout URL :
Enable signed push support [y/N]?
*** Review Labels***
Install Verified label [y/N]? y
*** Email Delivery***
// 最好要写上邮箱服务,省的后面还是需要配置
// 在这写的是公司邮箱服务,如果是qq可以这样写: smtp.163.com
SMTP server hostname [localhost]: mail.xxxx.com.cn
SMTP server port [(default)]: 25
SMTP encryption [none/?]:
SMTP username : djzheng@wxxxx.com.cn
*** Container Process***
Run as [user]:
Java runtime [/usr/lib/jvm/java-8-openjdk-amd64/jre]:
Copy gerrit-3.0.0.war to gerrit.mydomain.com/bin/gerrit.war [Y/n]?Y
Copying gerrit-3.0.0.war to gerrit.mydomain.com/bin/gerrit.war
*** SSH Daemon***
Listen on address []:
Listen on port [29418]:
Generating SSH host key … rsa… ed25519… ecdsa 256… ecdsa 384… ecdsa 521… done
*** HTTP Daemon**
Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address []:
Listen on port [8443]:
Canonical URL [https://ubuntu:8081/]: http:10.66.210.123:8081
Create new self-signed SSL certificate [Y/n]?
Certificate server name [gerrit.mydomain.com]:
Certificate expires in (days) [365]:
*** Cache**
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/oauth_tokens.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/web_sessions.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/mergeability.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/diff.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/pure_revert.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/conflicts.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/diff_summary.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/diff_intraline.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/git_tags.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/change_kind.lock.db [y/N]?
*** Plugins***
Installing plugins.
Install plugin codemirror-editor version v3.0.0 [y/N]? y
Installed codemirror-editor v3.0.0
Install plugin commit-message-length-validator version v3.0.0 [y/N]? y
Installed commit-message-length-validator v3.0.0
Install plugin delete-project version v3.0.0 [y/N]? y
Installed delete-project v3.0.0
Install plugin download-commands version v3.0.0 [y/N]? y
Installed download-commands v3.0.0
Install plugin gitiles version v3.0.0 [y/N]? y
Installed gitiles v3.0.0
Install plugin hooks version v3.0.0 [y/N]? y
Installed hooks v3.0.0
Install plugin plugin-manager version v3.0.0 [y/N]? y
Installed plugin-manager v3.0.0
Install plugin replication version v3.0.0 [y/N]? y
Installed replication v3.0.0
Install plugin reviewnotes version v3.0.0 [y/N]? y
Installed reviewnotes v3.0.0
Install plugin singleusergroup version v3.0.0 [y/N]? y
Installed singleusergroup v3.0.0
Install plugin webhooks version v3.0.0 [y/N]? y
Installed webhooks v3.0.0
Initializing plugins.
Initialized /home/user/gerrit_server/gerrit.mydomain.com
Reindexing projects: 100% (2/2) with: reindex --site-path gerrit.mydomain.com --threads 1 --index projects
Reindexed 2 documents in projects index in 2.1s (0.9/s)
如此,gerrit就安装完成了,可以通过ps查看是否已经运行:
# ps -aux | grep gerrit
gerrit 1910 0.0 0.0 9056 5880 pts/0 Ss Jun22 0:00 -bash
gerrit 7363 0.2 4.2 25553812 1365204 ? Sl Jun22 3:52 GerritCodeReview -Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance -Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance -jar /home/gerrit/gerrit_server/review_site/bin/gerrit.war daemon -d /home/gerrit/gerrit_server/review_site --run-id=1624360603.7326
gerrit配置和代理设置
上一小节,gerrit已经安装好了。那么接下来是否可以正确访问了呢。
我们试一下:
在浏览器中输入:上面设置的IP地址: 10.66.210.123:8081
但是此时访问存在配置问题,因为当启用http方式验证的时候,gerrit禁止直接通过端口与gerrit相连,此时需要借助Nginx反向代理访问,因而需要配置Nginx反向代理。
输入本机ip测试nginx是通的。
接下来我们需要设置一下代理:
首先,先确认并修改一下合适的端口,编辑gerrit配置文件:
vi ~/gerrit_server/review_site/etc/gerrit.config
其次, 接下来设置nginx反向代理:
# 创建一个gerrit.conf server配置文件,并设置内容如下:
cat /etc/nginx/sites-enabled/gerrit.conf
server {
# 设置访问代理端口
listen *:8443;
server_name localhost;
location / {
auth_basic "Welcomme to Gerrit Code Review Site";
#确保passwd路径正确, 该passwd后面将会讲到。在此我们先将passwd放置到gerrit安装目录下的etc目录中
auth_basic_user_file /home/gerrit/gerrit_server/review_site/etc/passwd;
# 该代理要和前面gerrit.config中设置的端口保持一致性
proxy_pass http://localhost:8081;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
location /login/ {
# 该代理要和前面gerrit.config中设置的端口保持一致性
proxy_pass http://localhost:8081;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
注意:
我用的nginx的版本是nginx version: nginx/1.18.0 (Ubuntu)。 所以直接创建一个配置放到/etc/nginx/sites-enabled目录中,重启nginx即可。
如果是其他版本的nginx要视具体情况添加配置。有的版本需要添加到/etc/nginx/nginx.conf中。
然后, 给gerrit创建一个用户,还记得前面提到的passwd文件吗? 接下来我们就要创建它
# 和Linux正常添加用户密码一样
# 这里我们第一次创建通过-c 并设置第一个用户为gerrit
# 即执行如下命令,并根据提示设置密码
sudo htpasswd -c ~/gerrit_server/review_site/etc/passwd gerrit
最后, 我们将对以上的改动重启服务,生效
# 重启nginx服务
service nginx restart
# 重启gerrit服务
~/gerrit_server/review_site/bin/gerrit.sh restart
接下来, 我们在通过浏览器访问gerrit,注意端口是nginx设置的访问端口8443
当输入浏览器后, 提示输入密码:
输入密码登录后, 将弹出确认信息:
注意:
如果是第一次登录,那么该账号将作为管理权限账号使用。
点击close进入到dashboard显示页面, 至此gerrit的安装已经完成了。
gitlab自动同步gerrit关联设置,请看下一章节
参考:
https://blog.csdn.net/CyrilTaylor/article/details/89463271
更多推荐
所有评论(0)