docker-compose构建gerrit前端代码审计功能

## 拉取gerrit需要的镜像

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

创建挂载数据存储目录

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

# 创建初始配置文件

vim /data/gerrit/etc/gerrit.config**
[gerrit]
  basePath = git
  canonicalWebUrl = http://192.168.1.168:9090
  # 该地址是外部访问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
  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 = hsy123 # ldap管理员密码
[sendemail]
        smtpPass = PUXQIYDYSRCOLDOX # 配置邮箱的授权码 不是邮箱密码

创建gerrit docker-compose文件

vim /data/docker-compose/gerrit.yml

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

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://192.168.1.168:9090
    command: init  # 初始化gerrit镜像配置 不用注释 启动完成后注释该项

  ldap:
    image: osixia/openldap
    ports:
      - "389:389"
      - "636:636"
    container_name: ldap
    environment:
      - LDAP_ADMIN_PASSWORD=hsy123
    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 注释放开 command: init

启动容器后 查看gerrit日志 看到输出 Initialized /var/gerrit 就可以停止初始化了

初始化启动gerrit

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

gerrit启动排错

如果启动容器没有起来 docker logs gerrit -f 查看日志发现 报错如下
Initializing Gerrit site …
fatal: /var/gerrit/etc/mail
fatal: Cannot make directory /var/gerrit/etc/mail

那么 就对挂载在宿主机上得gerrit整个目录 执行
chown -R 1000:1000 /data/gerrit/

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

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

创建gerrit管理员账号
利用ldap-admin进行管理账号
后续创建gerrit普通用户都是通过ldap-admin进行创建管理

登录https:192.168.1.168:6443
账号 cn=admin,dc=example,dc=org
密码 hsy123

创建gerrit账号 1.点击Create a child entry
选择账号模板
输入信息后 创建对象 在提交到ldap gerrit管理员账号就创建完成了

gerrit同步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

保存退出 重起容器

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

在容器内 ssh-keygen
cd ~ && cd .ssh/
cat id_rsa.pub
复制密钥给gitea仓库中配置免密拉取代码

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

登录gerritWEB页面

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

仓库的名字跟gitea上得仓库名 需要一致
创建gerrit仓库成功后
回到容器内
cd ~ && cd git/
rm -rf test.git
删除新创建的gerrit仓库
然后再改目录下 拉取gitea仓库 拉取的命令 需要注意
git clone --bare gitea仓库的ssh地址

拉取成功后
cat test.git/config
查看仓库地址

地址需要是gitea上的地址

创建同步配置的文件
cd ~ && cd etc/
vi replication.config
[remote “test”] # 同步的仓库的名字
projects = test # 同上
url = ssh://git@192.168.1.168:222/hsy/test.git # gitea仓库的地址
push = +refs/heads/:refs/heads/
push = +refs/tags/:refs/tags/
push = +refs/changes/:refs/changes/
threads = 3

ssh -p 29418 hsyadmin@192.168.1.168 gerrit plugin reload replication

执行这条命令后发生报错 没有权限这类的问题

hsyadmin 是gerrit登录的用户名

把/var/gerrit/.ssh 生成的公钥
登录gerrit前端页面 点击settings 或者小齿轮进行设置页面

测试同步代码功能 在宿主机上进行
宿主机上需要把公钥上传到gerrit ssh key 设置中 否则拉取不了 代码

拉取代码后 进行仓库 touch 1.txt 然后进行上传操作
特别注意:
提交的命令变为“git push -u origin HEAD:refs/for/”格式。
“refs/for/*”会将变更提交放到暂存区中,等待代码审核和集成验证

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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐