目录

配置Gerrit

创建Gerrit管理员账号

Gerrit同步Gitea仓库代码

测试代码提交审查功能

配置Gerrit

拉取gerrit需要的镜像

docker pull gerritcodereview/gerrit 
docker pull osixia/openldap 
docker pull osixia/phpldapadmin

没有docker的话需要先安装

sudo apt install docker.io

创建挂载数据存储目录

sudo mkdir -p /data/gerrit/{etc,git,db,index,cache,.ssh}

创建初始配置文件

sudo vim /data/gerrit/etc/gerrit.config**

内容为

[gerrit]
basePath = git
canonicalWebUrl = http://10.20.72.72:9090
#地址是系统的IP
#该地址是外部访问gerrit项目WEB页面的地址 注意端口号要跟docker-compose一致
[index]
type = LUCENE
[auth]
type = ldap
gitBasicAuth = true
[ldap]
server = ldap://ldap
username=cn=admin,dc=example,dc=org
accountBase = dc=example,dc=org
accountPattern = (&(objectClass=person)(uid=${username}))
accountFullName = displayName
accountEmailAddress = mail
#[sendemail]  #该设置是设置邮箱设置 如果使用原设置 那么邮箱服务是异常状态
#smtpServer = localhost
[sendemail] # 该配置的邮箱是网易邮箱 需要授权码 在secure.config 中配置授权码
smtpServer = smtp.163.com
smtpUser = xx@163.com#写自己的网易邮箱,替换xx
smtpServerPort = 25  #需要在容器内宿主机上都要开放该端口
from = xx@163.com#同理

[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
[container]
user = root


vim /data/gerrit/etc/secure.config


[ldap]
password = 111111                 # ldap管理员密码,自行设置
[sendemail]
smtpPass = PUXQIYDYSRCOLDOX  # 配置邮箱的授权码 不是邮箱密码,写自己邮箱

授权码获取步骤

将IMAP/SMIP点击打开,按照步骤来即可


创建gerrit docker-compose文件

docker-compose 没有安装的话先安装

sudo apt-get install docker-compose


sudo vim /data/docker-compose/gerrit.yml
version: '3'
services:
gerrit:
image: gerritcodereview/gerrit
ports:
- "29418:29418"
- "9090:8080"  # WEB项目访问地址
- "25:25"   # 邮箱功能开放端口
depends_on:
- ldap    # 该配置是 ldap服务启动成功后 再启动gerrit服务
container_name: gerrit
volumes:
- /data/gerrit/etc:/var/gerrit/etc
- /data/gerrit/git:/var/gerrit/git
- /data/gerrit/db:/var/gerrit/db
- /data/gerrit/index:/var/gerrit/index
- /data/gerrit/cache:/var/gerrit/cache
- /data/gerrit/.ssh:/var/gerrit/.ssh
environment:
- CANONICAL_WEB_URL=http://10.20.72.72:9090  #自己的IP
command: init  # 初始化gerrit镜像配置 不用注释 启动完成后注释该项

 ldap:
image: osixia/openldap
ports:
- "389:389"
- "636:636"
container_name: ldap
environment:
- LDAP_ADMIN_PASSWORD=111111
volumes:
- /data/gerrit/ldap/var:/var/lib/ldap
- /data/gerrit/ldap/etc:/etc/ldap/slapd.d

ldap-admin:
image: osixia/phpldapadmin
container_name: ldap-admin
ports:
- "6443:443"
environment:
- PHPLDAPADMIN_LDAP_HOSTS=ldap


初始化启动gerrit

sudo docker-compose -f /data/docker-compose/gerrit.yml up -d

gerrit启动排错

如果启动容器没有起来 使用

sudo docker logs gerrit -f

查看日志发现 报错如下

Initializing Gerrit site …

fatal: /var/gerrit/etc/mail

fatal: Cannot make directory /var/gerrit/etc/mail

那么 就对挂载在宿主机上得gerrit整个目录 执行

sudo chown -R 1000:1000 /data/gerrit/

在初始化完成后 注释 command: init 再次启动gerrit,指令:

sudosed -i  s/command/#command/g /data/docker-compose/gerrit.yml
sudo docker stop gerrit && sudo docker rm gerrit
sudo docker-compose -f /data/docker-compose/gerrit.yml up -d

这些指令的目的是修改权限、禁用某些命令、停止并删除现有的 Gerrit 容器,并重新通过 Docker Compose 启动一个新的 Gerrit 容器服务。这可能是为了确保 Gerrit 在重新启动时以正确的配置和权限运行

创建gerrit管理员账号

在浏览器中输入:10.20.72.72:6443  

进入界面如下图

搭建代码服务器,Gerrit代码审核,docker容器_docker


点击log in登录

搭建代码服务器,Gerrit代码审核,docker容器_docker_02

账号和密码为配置文件中已经设置好的

账号:cn=admin,dc=example,dc=org

密码是:111111

登录页面为下图

搭建代码服务器,Gerrit代码审核,docker容器_docker_03

利用ldap-admin进行管理账号

点击如下图,创建ldap账号

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_04

选择第一个

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_05

注意将账号和密码写完整

搭建代码服务器,Gerrit代码审核,docker容器_docker_06

点击提交到ldap gerrit管理员账号就创建完成了

搭建代码服务器,Gerrit代码审核,docker容器_docker_07

10.20.72.72:9090可以登陆到Gerrit前端页面

如果有下图问题,登录界面有两种

1.

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_08

2.

搭建代码服务器,Gerrit代码审核,docker容器_docker_09

第一种就是简单的账号密码登录,输入在前面注册账号操作得到的账号密码即可

第二种需要用到openID 或者UbuntuOne

通常需要的是第一种,解决办法是

搭建代码服务器,Gerrit代码审核,docker容器_Gerrit_10

将这个字段改成type = ldap即可

登录完成界面为下图

搭建代码服务器,Gerrit代码审核,docker容器_Gerrit_11

gerrit同步gitea仓库代码

注册gitea账号和新建仓库

点击加号新建仓库

搭建代码服务器,Gerrit代码审核,docker容器_Gerrit_12

实现gerrit审计代码 通过后 代码推送到gerrit仓库中 在从gerrit仓库中推送到gitea仓库中 进行自动部署操作

给gitea仓库中配置 gerrit容器内ssh免密拉取gitea仓库代码

进入gerrit容器内操作同步gitea的配置更改

docker exec -it gerrit /bin/bash
cd ~ && cd etc/
vi gerrit.config

#在最后一行添加配置

[plugins]
allowRemoteAdmin = true



保存退出 重起容器

重启Gerrit指令为

sudo docker-compose -f /data/docker-compose/gerrit.yml restart


在gitea创建一个新仓库 初始一个文件用来同步测试在gitea配置给gerrit服务器免密拉取代码的密钥配置

在容器内


ssh-keygencd ~ && cd .ssh/cat id_rsa.pub

复制密钥给gitea仓库中配置免密拉取代码

输入ssh-keygen后会进行SSH密钥保存位置的选择和密码的设置

搭建代码服务器,Gerrit代码审核,docker容器_git_13

设置好后将SSH复制到gitea中配置


然后再gerritWEB页面创建一个相同名字的仓库名

在右上角点击 CREATE NEW 创建新的仓库

如下图

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_14


仓库的名字跟gitea上得仓库名 需要一致

创建gerrit仓库成功后

回到容器内,删除新创建的gerrit仓库

cd ~ && cd git/
rm -rf test.git

然后再该目录下 拉取gitea仓库 拉取的命令 需要注意

git clone --bare git@gitea.com:zhou_ruilong/ubuntu.git

gitea仓库的ssh地址这里的是自己的gitea仓库SSH地址

搭建代码服务器,Gerrit代码审核,docker容器_git_15


拉取成功后

cat test.git/config

查看仓库地址

地址需要是gitea上的地址

#test为自己的仓库名称

创建同步配置的文件

cd ~ && cd etc/
vi replication.config

内容为:

[remote “ubuntu”]  # 同步的仓库的名字
projects = ubuntu  # 同上
url = ssh://git@10.20.72.72:222/ubuntu/ubuntu.git  # gitea仓库的地址
push = +refs/heads/:refs/heads/
push = +refs/tags/:refs/tags/
push = +refs/changes/:refs/changes/
threads = 3

接下来:

ssh -p 29418ubuntu@10.20.72.72 gerrit plugin reload replication

该命令的作用是重新加载 Gerrit 插件 replication用于在 Gerrit 服务器之间进行代码库复制和同步可以帮助实现分布式开发环境中的代码库复制和备份。

#ubuntu是gerrit登录的用户名

如果错误如下

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_16

表示插件 "replication" 并未在 Gerrit 中运行,这里可以不管他,跳过这一步即可

ssh -p 29418 ubuntu@10.20.72.72 gerrit plugin ls

这个命令可以查看所有正在运行的插件

如果错误如下

搭建代码服务器,Gerrit代码审核,docker容器_Gerrit_17

该错误是没有权限的问题,这个SSH是必须要加入到Gerrit的,上一步跳过了也需要加上,解决办法是

添加SSH权限

把/var/gerrit/.ssh 生成的公钥

登录gerrit前端页面 点击settings 或者小齿轮进行设置页面


测试代码提交审查功能

在宿主机上进行,需要把公钥上传到gerrit ssh key 设置中 否则拉取不了代码,指令:

ssh-keygen

type C:\Users\your_username\.ssh\id_rsa.pub

查找密钥位置的指令:

dir /s /b C:\id_rsa.pub


克隆Gerrit中仓库,选择新添加的仓库,点进去复制克隆地址

搭建代码服务器,Gerrit代码审核,docker容器_Gerrit_18

搭建代码服务器,Gerrit代码审核,docker容器_docker_19

在空文件中克隆这个仓库

添加新内容进行提交测试

特别注意:

提交的命令变为“git push -u origin HEAD:refs/for/”格式。

“refs/for/*”会将变更提交放到暂存区中,等待代码审核和集成验证

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

可能的错误,提示需要加上change-id

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_20

解决办法:

f="$(git rev-parse --git-dir)/hooks/commit-msg"; curl -o "$f" http://10.20.72.15:9090/tools/hooks/commit-msg ; chmod +x "$f"


这段命令的作用是从指定的 URL 下载提交消息钩子并将其保存到本地 Git 仓库的 commit-msg 目录下,并为其添加可执行权限


git commit --amend --no-edit

用于修改最新的提交并保持提交信息不变

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

提交后成功的话显示结果为

搭建代码服务器,Gerrit代码审核,docker容器_Gerrit_21

Gerrit前端页面会显示提交的记录

搭建代码服务器,Gerrit代码审核,docker容器_ubuntu_22


[sshd]
listenAddress = *:29418
threads = 112
batchThreads = 16
commandStartThreads = 16

gerrit.config 这个文件把这里加一下配置

最大线程处理任务

遇到的错误

错误:ldap登不上

搭建代码服务器,Gerrit代码审核,docker容器_docker_23

解决办法是在上述type = openid改成type = ldap后即可

Gerrit开机自启动

创建一个 systemd 服务文件可以通过以下步骤完成:


打开终端,并使用文本编辑器(比如 vim、nano 等)创建一个新的服务文件,比如 gerrit.service

sudo nano /etc/systemd/system/gerrit.service

在编辑器中输入以下内容作为示例服务文件内容:

[Unit]
Description=Gerrit Code Review
After=docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker-compose -f /data/docker-compose/gerrit.yml up -d
ExecStop=/usr/bin/docker-compose -f /data/docker-compose/gerrit.yml down
WorkingDirectory=/data/docker-compose/

[Install]
WantedBy=multi-user.target

修改 ExecStart 和 ExecStop 的路径和参数以匹配您的实际 docker-compose 配置。


保存文件并退出编辑器


更新 systemd 控制器以加载新的服务单元配置:

sudo systemctl daemon-reload

启用并启动该服务:

sudo systemctl enable gerrit

这条命令会在系统启动时自动启用 "gerrit" 服务,使其能够随着系统的启动而自动启动。

sudo systemctl start gerrit

这条命令用于手动启动 "gerrit" 服务,即立即启动该服务而无需等待系统重启。

验证服务状态:

sudo systemctl status gerrit