• 已删除用户
Administrator
发布于 2024-10-14 / 34 阅读
0

Gerrit 保姆教程之环境搭建

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

注意:

  1. LDAP_ADMIN_PASSWORD 需与secure.config一致。

  2. 数据卷根据实际情况调整。注意/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.yamlcommand: 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 DNPassword参考.env文件中的配置,此处为示例中的配置。)

3.2 新建组织

  1. 点击 Create a child entry

  1. 选择Generic: Organisational Unit

  2. 填入组织名gerrit,并创建对象

3.3 新建用户组

  1. 选择我们刚刚建好的ou=gerrit,然后点击Create a child entry

  2. 选择Generic: Posix Group

  3. 填入用户组名admin,并创建对象

3.4 新建用户

  1. 选择我们刚刚建好的cn=admin,然后点击Create a child entry

  2. 选择Generic: User Account

  3. 创建完成
    至此,我们的第一个LDAP帐户创建完毕。

3.5 登录Gerrit

打开网页http://192.168.3.17:18080,使用上面LDAP创建的帐户密码即可登录。

四、参考资料

Gerrit Code Review - Configuration