docker-compose构建Gerrit代码审计功能,搭建代码服务器
目录
配置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
如果启动容器没有起来 使用
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
进入界面如下图
点击log in登录
账号和密码为配置文件中已经设置好的
账号:cn=admin,dc=example,dc=org
密码是:111111
登录页面为下图
利用ldap-admin进行管理账号
点击如下图,创建ldap账号
选择第一个
、
注意将账号和密码写完整
点击提交到ldap gerrit管理员账号就创建完成了
10.20.72.72:9090可以登陆到Gerrit前端页面
如果有下图问题,登录界面有两种
第一种就是简单的账号密码登录,输入在前面注册账号操作得到的账号密码即可
第二种需要用到openID 或者UbuntuOne
通常需要的是第一种,解决办法是
将这个字段改成type = ldap即可
登录完成界面为下图
gerrit同步gitea仓库代码
注册gitea账号和新建仓库
点击加号新建仓库
实现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-keygen
cd ~ && cd .ssh/
cat id_rsa.pub
复制密钥给gitea仓库中配置免密拉取代码
输入ssh-keygen后会进行SSH密钥保存位置的选择和密码的设置
设置好后将SSH复制到gitea中配置
然后再gerritWEB页面创建一个相同名字的仓库名
在右上角点击 CREATE NEW 创建新的仓库
如下图
仓库的名字跟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地址
拉取成功后
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 29418 ubuntu@10.20.72.72 gerrit plugin reload replication
该命令的作用是重新加载 Gerrit 插件 replication用于在 Gerrit 服务器之间进行代码库复制和同步可以帮助实现分布式开发环境中的代码库复制和备份。
#ubuntu 是gerrit登录的用户名
如果错误如下
表示插件 "replication" 并未在 Gerrit 中运行,这里可以不管他,跳过这一步即可
ssh -p 29418 ubuntu@10.20.72.72 gerrit plugin ls
这个命令可以查看所有正在运行的插件
如果错误如下
该错误是没有权限的问题,这个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中仓库,选择新添加的仓库,点进去复制克隆地址
在空文件中克隆这个仓库
添加新内容进行提交测试
特别注意:
提交的命令变为“git push -u origin HEAD:refs/for/”格式。
“refs/for/*”会将变更提交放到暂存区中,等待代码审核和集成验证
git push -u origin HEAD:refs/for/master
可能的错误,提示需要加上change-id
解决办法:
f="$(git rev-parse --git-dir)/commit-msg"
curl -o "$f" http://10.20.72.72:9090/tools/commit-msg
chmod +x "$f"
这段命令的作用是从指定的 URL 下载提交消息钩子并将其保存到本地 Git 仓库的 commit-msg 目录下,并为其添加可执行权限
git commit --amend --no-edit
用于修改最新的提交并保持提交信息不变
git push -u origin HEAD:refs/for/zhou
提交后成功的话显示结果为
[sshd]
listenAddress = *:29418
threads = 112
batchThreads = 16
commandStartThreads = 16
gerrit.config 这个文件把这里加一下配置
最大线程处理任务
遇到的错误
错误:无法开启Gerrit
建议删除Gerrit目录包括其中所有文件,重新创建目录和文件
错误:ldap登不上
解决办法是在上述type = openid改成type = ldap后即可