docker-compose构建Gerrit代码审计功能,搭建代码服务器

avatar
作者
猴君
阅读量:1

目录

配置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后即可

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!