gerrit的部署与配置关联到不同服务器上的git仓库

girrit部署安装使用并关联不同服务器的git仓库

  • [1. 安装](#1. 安装)

近期在部署gerrit的时候踩了不少坑,记录一下完整过程,避免以后哪天又忘了

1. 安装

官网下载gerrit安装包:https://www.gerritcodereview.com/#download

之后安装必须的jdk环境,注意,最新的gerrit安装包需要jdk21,很多教程还在推荐11

直接sudo apt install openjdk-按tab键选择21的版本安装

安装完之后执行sudo java -jar gerrit-3.12.2.war init -d ./gerrit

安装的时候除了下面几条按列出来的填写,其他的都默认就行:

bash 复制代码
Authentication method [openid/?]: http

Run as [root]: gerrit (这里最好和你计算机当前用户一致,否则容易又权限问题)

Listen on port [8080]: 8095(这里的port改成你自己的Port就行)

插件安装全都选y

bash 复制代码
Installing plugins.
Install plugin codemirror-editor version v3.9.1 [y/N]? y
Installed codemirror-editor v3.9.1
Install plugin commit-message-length-validator version v3.9.1 [y/N]? y
Installed commit-message-length-validator v3.9.1
Install plugin delete-project version v3.9.1 [y/N]? y
Installed delete-project v3.9.1
Install plugin download-commands version v3.9.1 [y/N]? y
Installed download-commands v3.9.1
Install plugin gitiles version v3.9.1 [y/N]? y
Installed gitiles v3.9.1
Install plugin hooks version v3.9.1 [y/N]? y
Installed hooks v3.9.1
Install plugin plugin-manager version v3.9.1 [y/N]? y
Installed plugin-manager v3.9.1
Install plugin replication version v3.9.1 [y/N]? y
Installed replication v3.9.1
Install plugin reviewnotes version v3.9.1 [y/N]? y
Installed reviewnotes v3.9.1
Install plugin singleusergroup version v3.9.1 [y/N]? y
Installed singleusergroup v3.9.1
Install plugin webhooks version v3.9.1 [y/N]? y

安装完之后就会在本地的安装目录(我的是gerrit),看到安装生成的东西

接下来要调整gerrit配置

进入gerrit/etc目录,修改gerrit.config:

bash 复制代码
lzs@lzs-Precision-3591:~/gerrit$ cat etc/gerrit.config 
[gerrit]
	basePath = git
	canonicalWebUrl = http://lzs-Precision-3591:8099/
	serverId = b1e98aec-54b9-473f-8156-d5facb780e8b
[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 = lzs
	javaHome = /usr/lib/jvm/java-21-openjdk-amd64
[index]
	type = lucene
[auth]
	type = HTTP
[receive]
	enableSignedPush = false
[sendemail]
	smtpServer = localhost
[sshd]
	listenAddress = *:29418
[httpd]
	listenUrl = http://*:8099/
[cache]
	directory = cache
[ssh]
        sshKeyPath = /home/lzs/.ssh/gerrit_rsa1

前面已经选的情况下,只需要配置

bash 复制代码
[ssh]
        sshKeyPath = /home/lzs/.ssh/gerrit_rsa1

用于后面同步gitlab仓库。

然后安装htpasswd

sudo apt-get install apache2-utils -y

nginx反向代理环境安装

sudo apt-get install nginx

配置nginx反向代理:

新建/etc/nginx/conf.d/gerrit.conf,增加以下内容:

bash 复制代码
server {
	listen *:86;
	server_name localhost;
	allow all;
	deny all;
	auth_basic "Welcomme to Gerrit Code Review Site!";
	auth_basic_user_file /home/server_software/gerrit/etc/gerrit.passwd;
	location / {
	proxy_pass http://lzs-Precision-3591:8099/;
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_set_header Host $host;
	}
}

创建gerrit.password文件,并创建用户

htpasswd -c /home/server_software/gerrit/etc/gerrit.passwd admin # 创建第一个用户admin,同时会生成一个gerrit.password文件

htpasswd -m /home/server_software/gerrit/etc/gerrit.passwd lyn # 在gerrit.password增加用户用 -m

这里创建的password文件要在nginx的gerrit.conf中路径匹配上nginx才能加载

重启nginx:systemctl restart nginx

到这里已经初步配置好本地的gerrit服务了。重启gerrit:./bin/gerrit.sh start (最好先stop)

这时就可以去浏览器登录了,注意,首次登录最好使用创建的第一个用户admin,否则可能出其他问题;

登录之前,我们可以将自己的git仓库的代码,clone到gerrit/git/目录下,注意这里clone必须加--bare参数:

bash 复制代码
git clone --bare ssh://git@106.53.*.*/root/wangzk-test.git

之后到gerrit网页上的browse下就能看到自己克隆的git仓库了。

之后配置ssh密钥:

bash 复制代码
ssh-keygen -t rsa -C "xxx.mail.com"

然后将公钥粘贴到gitlab和gerrit的配置中,gerrit的配置点击用户后可以看到有个ssh keys

这里需要注意,你的公钥保存地点需要当前gerrit运行的用户能访问到,如果访问不到就会有问题,比如我之前就是root运行的gerrit,但我生成密钥是在个人用户下生成的,导致replication插件找不到,代码同步会有问题。这种情况解决方案就是在gerrit运行的用户下生成密钥,并且配置~/.ssh/config,添加:

bash 复制代码
Host xxx.com(你的git服务地址)
HostName xxx.com(你的git服务地址)
Port 你的git服务端口
User git
IdentityFile /root/.ssh/gerrit_rsa1(密钥路径)
IdentitiesOnly yes

执行下面命令验证没问题即可

bash 复制代码
ssh -i /root/.ssh/gerrit_rsa1 -p 你的git服务端口 你的git服务地址
PTY allocation request failed on channel 0
Welcome to GitLab, @677365!
Connection to setp-gitlab.seres.cn closed.
root@lzs-Precision-3591:/home/lzs# ssh -p 你的git服务端口 你的git服务地址

之后配置etc/replication.config

bash 复制代码
[remote "仓库名"]
        rescheduleDelay = 15
        projects = 仓库名
        url = ssh://git@仓库地址
        push = +refs/heads/*:refs/heads/*
        push = +refs/tags/*:refs/tags/*
        push = +refs/changes/*:refs/changes/*
        fetch = +refs/heads/*:refs/heads/*
        fetch = +refs/tags/*:refs/tags/*
        fetch = +refs/changes/*:refs/changes/*
        threads = 3

保存之后重启,即可

测试时启动时用./bin/gerrit.sh run可以看到终端日志输出,另外注意gerrit目录下的权限,特别是logs和git目录,最好改成777。

验证:

以上配置完后,时用Gerrit 仓库里推荐的git clone命令拉取仓库,修改文件,然后提交并推送,这里还有一点,需要配置自动生成changeid,执行:

bash 复制代码
 f="$(git rev-parse --git-dir)/hooks/commit-msg"; curl -o "$f" http://lzs-Precision-3591:8099/tools/hooks/commit-msg ; chmod +x "$f"

即可,没配置推送的时候也会自动把命令给你报出来

推送的时候都要加HEAD:refs/for,如下:

bash 复制代码
git push origin HEAD:refs/for/d10_application_dev_lzs

其他事项:

gerrit默认只会同步本地到git,git的更新,分支的变更,如何同步到gerrit呢?

这个问题,就需要通过git的webhooks来解决了,变更触发调用更新本地仓库的操作

相关推荐
sdm07042742 分钟前
yum和开发工具vim/gcc
linux·服务器·centos
zhaoyufei13343 分钟前
RK3568-11.0 设置WiFi p2p静态IP
服务器·tcp/ip·p2p
Leinwin6 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382506 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇6 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7596 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣7 小时前
智能体选型实战指南
运维·人工智能
yy55277 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ8 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔9 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络