脚本用途与使用方法
gerrit_setup.sh用于在 Ubuntu 服务器上一键搭建 Gerrit 代码评审环境,并可选地创建一个裸 Git 仓库作为评审项目。脚本会自动完成依赖安装、git系统用户创建与 SSH 密钥生成、Gerrit 3.4.0 的下载与初始化、服务注册与启动,最后输出访问地址与常用 Git 命令提示。
摘要:本文介绍
gerrit_setup.sh脚本,用于在 Ubuntu 18.04 / 20.04 服务器上一键搭建 Gerrit 3.4.0 代码评审环境。脚本自动完成 OpenJDK 11 PPA 添加、依赖安装、git系统用户与 SSH 密钥创建、Gerrit WAR 包下载与init --batch初始化、systemd服务注册与启动,并支持通过-p/--project-name可选创建同名裸仓库并写入gerrit.config。脚本对已存在的用户与已安装的 Gerrit 做了幂等判断,重复执行时自动跳过,最终输出http://<服务器IP>:8080访问地址与克隆、提交、推送示例命令。
功能概述
- 安装依赖:
openssh-server、git、openjdk-11-jdk-headless、nginx - 创建并配置
git系统用户及其 SSH 密钥 - 通过
-p/--project-name创建同名裸仓库,并写入gerrit.config - 下载并初始化 Gerrit 3.4.0,注册为
systemd服务并启动 - 输出 Gerrit Web 访问地址与仓库克隆、提交、推送示例
下面是脚本的整体执行流程:
整个流程按「参数解析 → 环境准备 → 用户与密钥 → 可选建仓 → Gerrit 安装 → 服务启动 → 结果输出」的顺序推进。脚本在创建git用户、创建项目仓库和安装 Gerrit 三处都做了存在性判断,因此重复执行时会自动跳过已完成步骤,只补齐缺失环节,最终统一输出 Web 访问地址与克隆、提交、推送示例命令。
依赖环境
- Ubuntu 18.04 / 20.04(需支持
ppa:openjdk-r/ppa) - 具备
sudo权限的普通用户 - 服务器可访问外网,用于下载 Gerrit WAR 包与安装软件包
- 已安装
wget、add-apt-repository(software-properties-common)
参数用法
# 赋予执行权限chmod+x gerrit_setup.sh# 创建名为 demo 的评审项目./gerrit_setup.sh-pdemo# 等价写法./gerrit_setup.sh --project-name demo不传-p时脚本只安装并启动 Gerrit,不创建项目仓库;传入未知参数会打印提示并以状态码1退出。
访问 Gerrit Web 界面
脚本执行完成后,终端会输出形如http://<服务器IP>:8080的地址,在浏览器中打开即可:
- 默认管理员用户名:
admin - 密码:Gerrit 初始化过程中设置的密码
登录后即可在 Web 界面中浏览项目、查看变更并进行代码评审。
#!/bin/bash# Set up author, timestamp, and contact informationSCRIPT_NAME='gerrit_setup.sh'AUTHOR='CursorBot'TIMESTAMP=$(date+"%Y-%m-%d %H:%M:%S")CONTACT='cursorbot@example.com'# Set up command-line argumentswhile[[$#-gt0]];docase$1in-p|--project-name)PROJECT_NAME="$2"shift2;;*)echo"Unknown argument:$1"exit1;;esacdone# Add OpenJDK 11 PPA and update package sourcessudoadd-apt-repository ppa:openjdk-r/ppasudoaptupdate# Install dependenciessudoaptinstall-yopenssh-servergitopenjdk-11-jdk-headless nginx# Create and configure Git userif!id-ugit>/dev/null2>&1;thensudoadduser --disabled-password--gecos""gitsudosugit-c'mkdir /home/git/.ssh && touch /home/git/.ssh/authorized_keys && chmod 600 /home/git/.ssh/authorized_keys'sudosugit-c'ssh-keygen -b 4096 -t rsa -f /home/git/.ssh/id_rsa -N ""'elseecho"User 'git' already exists, skipping creation."fi# Setup Git serverif[-n"${PROJECT_NAME}"];thensudosugit-c"mkdir /home/git/${PROJECT_NAME}.git && cd /home/git/${PROJECT_NAME}.git && git init --bare"IP_ADDRESS=$(hostname-I|awk'{print $1}')sudosugit-c"echo\"port:29418\ntype: GERRIT\nfilesystem_directory: /var/gerrit/review_site\nssh_key: /home/git/.ssh/id_rsa\ncanonical_web_url: http://${IP_ADDRESS}:8080/\"> /home/git/${PROJECT_NAME}.git/gerrit.config"fisudochown-Rgit:git /home/gitsudochmod-R755/home/git# Setup Gerrit serverif!command-vgerrit>/dev/null2>&1;thenwgethttps://gerrit-releases.storage.googleapis.com/gerrit-3.4.0.war-P/var/gerrit/sudojava-jar/var/gerrit/gerrit-3.4.0.war init--batch--no-auto-start-d/var/gerrit/review_sitesudomkdir-p/var/gerrit/review_site/etc/sudocp/var/gerrit/review_site/bin/gerrit.config /var/gerrit/review_site/etc/sudochown-Rgit:git /var/gerritsudosystemctlenablegerrit.servicesudosystemctl start gerrit.serviceelseecho"Gerrit server already installed, skipping setup."fi# Clone Git repository, add and commit file, push changes# cd /tmp# git clone "ssh://git@${IP_ADDRESS}:29418/${PROJECT_NAME}.git"# cd "${PROJECT_NAME}"# echo "This is a test file." > test.txt# git add test.txt# git commit -m "Added test file"# git push# Output success messageecho"Gerrit server setup complete. Project '${PROJECT_NAME}' created and ready for review."echo""echo"You can log in to Gerrit by navigating to the following URL in your web browser:"echo" http://${IP_ADDRESS}:8080"echo"Log in using the following credentials:"echo" Username: admin"echo" Password: (the password you specified during Gerrit setup)"echo""echo"To download and submit changes to the Git repository, run the following commands:"echo" git clone ssh://git@${IP_ADDRESS}:29418/${PROJECT_NAME}.git"echo" cd${PROJECT_NAME}"echo" (make changes to files)"echo" git add (changed files)"echo" git commit -m\"(commit message)\""echo" git push"总结
- 一键部署:
gerrit_setup.sh自动完成依赖安装、git用户与 SSH 密钥创建、Gerrit 3.4.0 下载初始化、systemd服务注册与启动,无需手工逐步操作。 - 可选建仓:通过
-p/--project-name可同时创建同名裸仓库并写入gerrit.config;不传该参数则只安装并启动 Gerrit。 - 幂等友好:脚本对已存在的
git用户与已安装的 Gerrit 做了判断,重复执行时会跳过对应步骤,避免破坏现有环境。 - 使用前提:Ubuntu 18.04 / 20.04、具备
sudo权限、服务器可访问外网,并已安装wget与software-properties-common。 - 执行结果:终端输出
http://<服务器IP>:8080访问地址、默认管理员账号及克隆/提交/推送示例命令,可直接进入 Web 界面开展代码评审。
参考资料
- Gerrit Code Review 3.4.0 官方文档
- Gerrit 初始化与配置参数说明(
init命令) - Gerrit 配置文件
gerrit.config参考 - OpenJDK PPA 页面(ppa:openjdk-r/ppa)
- Gerrit 官方下载页(WAR 包发布地址)