249 lines
7.0 KiB
Bash
Executable File
249 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Gerrit 一键安装脚本
|
|
# 支持 Ubuntu/Debian 和 CentOS/Rocky Linux
|
|
|
|
set -e
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 配置变量
|
|
GERRIT_VERSION="${GERRIT_VERSION:-3.5.0.1}"
|
|
GERRIT_HOME="/opt/gerrit"
|
|
GERRIT_USER="${USER}"
|
|
GERRIT_PORT="${GERRIT_PORT:-8080}"
|
|
GERRIT_SSH_PORT="${GERRIT_SSH_PORT:-29418}"
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}Gerrit 自动化安装脚本${NC}"
|
|
echo -e "${GREEN}版本: ${GERRIT_VERSION}${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
|
|
# 检测系统类型
|
|
detect_os() {
|
|
if [ -f /etc/os-release ]; then
|
|
. /etc/os-release
|
|
OS=$ID
|
|
OS_VERSION=$VERSION_ID
|
|
elif [ -f /etc/redhat-release ]; then
|
|
OS="rhel"
|
|
OS_VERSION=$(cat /etc/redhat-release | sed 's/.*release \([0-9]\+\).*/\1/')
|
|
else
|
|
echo -e "${RED}无法检测操作系统类型${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${YELLOW}检测到系统: ${OS} ${OS_VERSION}${NC}"
|
|
}
|
|
|
|
# 安装依赖
|
|
install_dependencies() {
|
|
echo -e "${GREEN}开始安装依赖...${NC}"
|
|
|
|
if [[ "$OS" == "ubuntu" ]] || [[ "$OS" == "debian" ]]; then
|
|
sudo apt update
|
|
sudo apt install -y git wget openjdk-17-jdk
|
|
elif [[ "$OS" == "centos" ]] || [[ "$OS" == "rhel" ]] || [[ "$OS" == "rocky" ]]; then
|
|
if command -v dnf &> /dev/null; then
|
|
sudo dnf install -y git wget java-17-openjdk java-17-openjdk-devel
|
|
else
|
|
sudo yum install -y git wget java-17-openjdk java-17-openjdk-devel
|
|
fi
|
|
else
|
|
echo -e "${RED}不支持的操作系统: ${OS}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 验证 Java 安装
|
|
if ! java -version 2>&1 | grep -q "version"; then
|
|
echo -e "${RED}Java 安装失败${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}依赖安装完成${NC}"
|
|
}
|
|
|
|
# 创建工作目录
|
|
create_directories() {
|
|
echo -e "${GREEN}创建工作目录...${NC}"
|
|
sudo mkdir -p ${GERRIT_HOME}
|
|
sudo chown ${GERRIT_USER}:${GERRIT_USER} ${GERRIT_HOME}
|
|
cd ${GERRIT_HOME}
|
|
}
|
|
|
|
# 下载 Gerrit
|
|
download_gerrit() {
|
|
echo -e "${GREEN}下载 Gerrit ${GERRIT_VERSION}...${NC}"
|
|
cd ${GERRIT_HOME}
|
|
|
|
if [ ! -f "gerrit-${GERRIT_VERSION}.war" ]; then
|
|
wget https://gerrit-releases.storage.googleapis.com/gerrit-${GERRIT_VERSION}.war
|
|
else
|
|
echo -e "${YELLOW}Gerrit war 文件已存在,跳过下载${NC}"
|
|
fi
|
|
}
|
|
|
|
# 初始化 Gerrit
|
|
init_gerrit() {
|
|
echo -e "${GREEN}初始化 Gerrit...${NC}"
|
|
cd ${GERRIT_HOME}
|
|
|
|
if [ -d "review_site" ]; then
|
|
echo -e "${YELLOW}Gerrit 已初始化,跳过初始化步骤${NC}"
|
|
return
|
|
fi
|
|
|
|
# 获取服务器 IP
|
|
SERVER_IP=$(hostname -I | awk '{print $1}')
|
|
if [ -z "$SERVER_IP" ]; then
|
|
SERVER_IP="localhost"
|
|
fi
|
|
|
|
# 非交互式初始化
|
|
java -jar gerrit-${GERRIT_VERSION}.war init \
|
|
-d review_site \
|
|
--batch \
|
|
--no-auto-start \
|
|
-D gerrit.canonicalWebUrl=http://${SERVER_IP}:${GERRIT_PORT}/ \
|
|
--install-plugin=download-commands \
|
|
--install-plugin=replication \
|
|
--install-plugin=reviewnotes || true
|
|
|
|
# 配置认证方式为开发模式(方便个人使用)
|
|
cat > review_site/etc/gerrit.config << EOCONFIG
|
|
[gerrit]
|
|
basePath = git
|
|
canonicalWebUrl = http://${SERVER_IP}:${GERRIT_PORT}/
|
|
serverId = $(uuidgen 2>/dev/null || echo $(date +%s))
|
|
[database]
|
|
type = h2
|
|
database = db/ReviewDB
|
|
[auth]
|
|
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
|
|
[sshd]
|
|
listenAddress = *:${GERRIT_SSH_PORT}
|
|
[httpd]
|
|
listenUrl = http://*:${GERRIT_PORT}/
|
|
[cache]
|
|
directory = cache
|
|
[index]
|
|
type = LUCENE
|
|
[receive]
|
|
enableSignedPush = false
|
|
EOCONFIG
|
|
|
|
echo -e "${GREEN}Gerrit 初始化完成${NC}"
|
|
}
|
|
|
|
# 启动 Gerrit
|
|
start_gerrit() {
|
|
echo -e "${GREEN}启动 Gerrit 服务...${NC}"
|
|
cd ${GERRIT_HOME}/review_site
|
|
|
|
# 启动服务
|
|
bin/gerrit.sh start
|
|
|
|
# 等待服务启动
|
|
sleep 5
|
|
|
|
# 检查状态
|
|
if bin/gerrit.sh status | grep -q "Running"; then
|
|
echo -e "${GREEN}Gerrit 服务启动成功!${NC}"
|
|
else
|
|
echo -e "${RED}Gerrit 服务启动失败,请检查日志${NC}"
|
|
echo -e "${YELLOW}查看日志: tail -f ${GERRIT_HOME}/review_site/logs/gerrit.log${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 创建 systemd 服务(可选)
|
|
create_systemd_service() {
|
|
echo -e "${GREEN}创建 systemd 服务...${NC}"
|
|
|
|
sudo tee /etc/systemd/system/gerrit.service > /dev/null << EOSERVICE
|
|
[Unit]
|
|
Description=Gerrit Code Review
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=forking
|
|
User=${GERRIT_USER}
|
|
Group=${GERRIT_USER}
|
|
ExecStart=${GERRIT_HOME}/review_site/bin/gerrit.sh start
|
|
ExecStop=${GERRIT_HOME}/review_site/bin/gerrit.sh stop
|
|
ExecReload=${GERRIT_HOME}/review_site/bin/gerrit.sh restart
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOSERVICE
|
|
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable gerrit
|
|
|
|
echo -e "${GREEN}systemd 服务创建完成${NC}"
|
|
echo -e "${YELLOW}使用以下命令管理服务:${NC}"
|
|
echo -e " 启动: sudo systemctl start gerrit"
|
|
echo -e " 停止: sudo systemctl stop gerrit"
|
|
echo -e " 重启: sudo systemctl restart gerrit"
|
|
echo -e " 状态: sudo systemctl status gerrit"
|
|
}
|
|
|
|
# 输出访问信息
|
|
print_info() {
|
|
SERVER_IP=$(hostname -I | awk '{print $1}')
|
|
if [ -z "$SERVER_IP" ]; then
|
|
SERVER_IP="localhost"
|
|
fi
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}安装完成!${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${YELLOW}访问地址:${NC}"
|
|
echo -e " Web 界面: http://${SERVER_IP}:${GERRIT_PORT}"
|
|
echo -e " SSH 端口: ${GERRIT_SSH_PORT}"
|
|
echo -e ""
|
|
echo -e "${YELLOW}常用命令:${NC}"
|
|
echo -e " 启动服务: ${GERRIT_HOME}/review_site/bin/gerrit.sh start"
|
|
echo -e " 停止服务: ${GERRIT_HOME}/review_site/bin/gerrit.sh stop"
|
|
echo -e " 重启服务: ${GERRIT_HOME}/review_site/bin/gerrit.sh restart"
|
|
echo -e " 查看状态: ${GERRIT_HOME}/review_site/bin/gerrit.sh status"
|
|
echo -e " 查看日志: tail -f ${GERRIT_HOME}/review_site/logs/gerrit.log"
|
|
echo -e ""
|
|
echo -e "${YELLOW}配置文件位置:${NC}"
|
|
echo -e " ${GERRIT_HOME}/review_site/etc/gerrit.config"
|
|
echo -e ""
|
|
echo -e "${YELLOW}首次访问:${NC}"
|
|
echo -e " 1. 打开浏览器访问 http://${SERVER_IP}:${GERRIT_PORT}"
|
|
echo -e " 2. 使用任意用户名登录(开发模式)"
|
|
echo -e " 3. 第一个登录的用户将自动成为管理员"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
detect_os
|
|
install_dependencies
|
|
create_directories
|
|
download_gerrit
|
|
init_gerrit
|
|
start_gerrit
|
|
|
|
# 询问是否创建 systemd 服务
|
|
read -p "是否创建 systemd 服务以便开机自启? (y/n): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
create_systemd_service
|
|
fi
|
|
|
|
print_info
|
|
}
|
|
|
|
# 执行主函数
|
|
main
|
|
|