Gerrit Code Review 是一个流行的代码评审工具,但在互联网企业中应用并不广泛,网上教程版本比较旧且错误很多,兜兜转转踩了很多坑。此篇文章为目前为止最靠谱的记录。
一、准备工作
1.1 文件结构
├── docker-compose.yaml
├── .env
├── gerrit/
│ └── etc/
│ ├── gerrit.config
│ └── secure.config
1.2 文件说明
1.2.1 docker-compose.yaml
networks:
1panel-network:
external: true
services:
gerrit:
# 容器运行的镜像
image: registry.cn-shenzhen.aliyuncs.com/zhangqintech/gerrit:3.10.1
# 自定义容器名称
container_name: ${CONTAINER_NAME}
# 添加环境变量
environment:
TZ: Asia/Shanghai
CANONICAL_WEB_URL: ${CANONICAL_WEB_URL}
# 容器总是重新启动
restart: always
# 端口映射
ports:
- ${GERRIT_PORT_SSH}:29418
- ${GERRIT_PORT_HTTP}:8080
depends_on:
- ldap
# 配置容器连接的网络
networks:
- 1panel-network
# 以 root 用户身份运行容器
user: root
# 将主机的数据卷或着文件挂载到容器里
volumes:
# - "./gerrit/etc:/var/gerrit/etc" # 对于强迫症来说,建议将`./gerrit/etc`目录拷贝到`/mydata/docker/volumes/`目录下
- "/mydata/docker/volumes/gerrit/etc:/var/gerrit/etc"
- "/mydata/docker/volumes/gerrit/git:/var/gerrit/git"
- "/mydata/docker/volumes/gerrit/index:/var/gerrit/index"
- "/mydata/docker/volumes/gerrit/cache:/var/gerrit/cache"
- "/mydata/docker/volumes/gerrit/db:/var/gerrit/db"
# command: init # 首次执行必须取消此行注释
# 部署配置
deploy:
# 资源配置
resources:
limits:
cpus: ${CPU_LIMIT}
memory: ${MEMORY_LIMIT}
ldap:
# 容器运行的镜像
image: registry.cn-shenzhen.aliyuncs.com/zhangqintech/openldap
# 自定义容器名称
container_name: ${CONTAINER_NAME}-ldap
ports:
- "${LDAP_PORT}:389"
- "${LDAP_LDAPS_PORT}:636"
# 配置容器连接的网络
networks:
- 1panel-network
environment:
LDAP_ORGANISATION: ${LDAP_ORGANISATION}
LDAP_DOMAIN: ${LDAP_DOMAIN}
LDAP_ADMIN_PASSWORD: ${LDAP_ADMIN_PASSWORD} # 与secure.config一致
volumes:
- /mydata/docker/volumes/gerrit/ldap/var:/var/lib/ldap
- /mydata/docker/volumes/gerrit/ldap/etc:/etc/ldap/slapd.d
ldap-admin:
# 容器运行的镜像
image: registry.cn-shenzhen.aliyuncs.com/zhangqintech/phpldapadmin
# 自定义容器名称
container_name: ${CONTAINER_NAME}-ldap-admin
ports:
- "${LDAP_ADMIN_PORT_HTTP}:80"
- "${LDAP_ADMIN_PORT_HTTPS}:443"
# 配置容器连接的网络
networks:
- 1panel-network
environment:
PHPLDAPADMIN_LDAP_HOSTS: ldap
1.2.2 .env
# 容器名称
CONTAINER_NAME="cicd-gerrit"
# CPU限制: 不限制
CPU_LIMIT=0
# 内存限制:不限制
MEMORY_LIMIT=0
# gerrit 外部访问地址
CANONICAL_WEB_URL=http://xx.xx.xx.xx:18018
# gerrit http 端口
GERRIT_PORT_HTTP=18018
# gerrit ssh 端口
GERRIT_PORT_SSH=19418
# ldap 监听端口
LDAP_PORT=10389
# ldap tls 端口
LDAP_LDAPS_PORT=10636
# ldap 组织名称
LDAP_ORGANISATION=aicc
# ladp 组织域名
LDAP_DOMAIN=aicc.com
# ladp 管理员密码
LDAP_ADMIN_PASSWORD=123456
# ladp admin http 端口
LDAP_ADMIN_PORT_HTTP=16080
# ladp admin https 端口
LDAP_ADMIN_PORT_HTTPS=16443
注意:
LDAP_ADMIN_PASSWORD 需与secure.config一致。
数据卷根据实际情况调整。注意
/var/gerrit/etc
,我是提前将`./gerrit/etc`
目录拷贝到`/mydata/volumes/`
目录下。
1.2.3 gerrit.config
[gerrit]
basePath = git
[index]
type = LUCENE
[auth]
type = ldap
gitBasicAuth = true
[ldap]
server = ldap://ldap
username = cn=admin,dc=aicc,dc=com
accountBase = dc=aicc,dc=com
accountPattern = (&(objectClass=person)(uid=${username}))
accountFullName = displayName
accountEmailAddress = mail
[sendemail]
smtpServer = smtp.exmail.qq.com
smtpUser = 邮箱地址
smtpPass = 邮箱密码
from = 邮箱地址
[sshd]
listenAddress = *:29418
advertisedAddress = *:19418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
[container]
user = root
1.2.4 secure.config
[ldap]
password = 123456
1.3 注意事项
部署前,请仔细阅读该文档和文件中的每一个行注释!!!
1.3.1 默认目录习惯
个人目录习惯如下,如需调整,请检查docker-compose.yml
是否遗漏修改:
compose 文件默认根路径为
/mydata/docker/compose/。
数据卷默认根路径为:
/mydata/docker/volumes/
。注意/mydata/docker/volumes/
请在数据盘上创建。
1.3.2 默认网络服务
本服务是在`1Panel`上调试通过的,默认挂载到名为`1panel-network`的容器网络上,如需修改请编辑`docker-compose.yml`文件。
1.3.3 默认容器端口
默认端口配置在`.env`文件中,需要注意`./gerrit/etc/gerrit.config`中也有也有端口配置,需保持一致。
1.3.4 账号、密码、邮箱配置等
初始的账号、密码、邮箱配置等为示例,不保证能直接使用,请替换为自己的。注意账号、密码配置分布在于`.env`、`./gerrit/etc/gerrit.config`、`./gerrit/etc/secure.config`文件中,不要遗漏。
二、部署启动
2.1 初始化配置文件
根据自身实际情况,修改./gerrit/etc/
目录下的文件配置。并将./gerrit/etc
目录拷贝到/mydata/docker/volumes/
目录下。
$ cp -r ./gerrit /mydata/docker/volumes/gerrit
2.2 初始启动
将docker-compose.yml
的# command: init
这一行取消注释,然后在项目根目录执行:
$ sudo docker-compose up gerrit
接着,gerrit服务会自动进行初始化,等到初始化完毕,docker容器会自动停止:
gerrit_server exited with code 0
2.3 正常启动
将docker-compose.yaml
的command: init
这一行注释掉,然后在项目根目录执行:
docker-compose up -d
此时所有服务都应该正常启动,gerrit的服务会有日志输出:
Gerrit Code Review 3.x.x ready
三、配置LDAP帐户
在LDAP中创建的第一个账号即为gerrit的管理员。特别注意,创建后不可修改此账号信息,会导致Gerrit无法识别管理员。
示例账号信息配置如下:
组织:gerrit
用户组:admin
管理员账号:gerrit
管理员邮箱(虚拟):gerrit@muxin.tech
系统邮箱:robot@muxin.tech
3.1 登录LDAP管理网页
在成功启动服务后,由于gerrit的授权由LDAP提供,所以首先需要登录到ldap-admin
网页去新建一个帐户用于登录gerrit。打开https://192.168.3.17:16443
网页(注意必须是https):
Login DN:cn=admin,dc=aicc,dc=com
Password:123456
(Login DN
与Password
参考.env
文件中的配置,此处为示例中的配置。)
3.2 新建组织
点击
Create a child entry
选择
Generic: Organisational Unit
填入组织名
gerrit
,并创建对象
3.3 新建用户组
选择我们刚刚建好的
ou=gerrit
,然后点击Create a child entry
选择
Generic: Posix Group
填入用户组名
admin
,并创建对象
3.4 新建用户
选择我们刚刚建好的
cn=admin
,然后点击Create a child entry
选择
Generic: User Account
创建完成
至此,我们的第一个LDAP帐户创建完毕。
3.5 登录Gerrit
打开网页http://192.168.3.17:18080
,使用上面LDAP创建的帐户密码即可登录。