Files
gerrit/reinstall_gerrit.sh
2025-12-22 17:12:39 +08:00

209 lines
6.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Gerrit 重新安装脚本
# 用于完全清理并重新安装 Gerrit
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置变量
GERRIT_HOME="/home/renjianbo/gerrit_install"
GERRIT_VERSION="3.5.0.1"
GERRIT_PORT="8080"
GERRIT_SSH_PORT="29418"
SERVER_IP="101.43.95.130"
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Gerrit 重新安装脚本${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
# 1. 停止现有服务
echo -e "${YELLOW}[1/6] 停止现有 Gerrit 服务...${NC}"
if [ -d "${GERRIT_HOME}/review_site" ]; then
cd ${GERRIT_HOME}/review_site
if [ -f "bin/gerrit.sh" ]; then
bin/gerrit.sh stop 2>/dev/null || true
sleep 2
fi
fi
echo -e "${GREEN}✓ 服务已停止${NC}"
echo ""
# 2. 备份现有数据(可选)
echo -e "${YELLOW}[2/6] 备份现有数据...${NC}"
BACKUP_DIR="${GERRIT_HOME}/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p ${BACKUP_DIR}
if [ -d "${GERRIT_HOME}/review_site" ]; then
# 备份 Git 仓库
if [ -d "${GERRIT_HOME}/review_site/git" ]; then
echo " 备份 Git 仓库..."
cp -r ${GERRIT_HOME}/review_site/git ${BACKUP_DIR}/ 2>/dev/null || true
fi
# 备份数据库
if [ -d "${GERRIT_HOME}/review_site/db" ]; then
echo " 备份数据库..."
cp -r ${GERRIT_HOME}/review_site/db ${BACKUP_DIR}/ 2>/dev/null || true
fi
# 备份配置
if [ -d "${GERRIT_HOME}/review_site/etc" ]; then
echo " 备份配置文件..."
cp -r ${GERRIT_HOME}/review_site/etc ${BACKUP_DIR}/ 2>/dev/null || true
fi
fi
echo -e "${GREEN}✓ 数据已备份到: ${BACKUP_DIR}${NC}"
echo ""
# 3. 清理旧安装
echo -e "${YELLOW}[3/6] 清理旧安装...${NC}"
if [ -d "${GERRIT_HOME}/review_site" ]; then
rm -rf ${GERRIT_HOME}/review_site
echo " 已删除旧的 review_site 目录"
fi
echo -e "${GREEN}✓ 清理完成${NC}"
echo ""
# 4. 检查并下载 Gerrit
echo -e "${YELLOW}[4/6] 检查 Gerrit 安装包...${NC}"
cd ${GERRIT_HOME}
if [ ! -f "gerrit-${GERRIT_VERSION}.war" ]; then
echo " 下载 Gerrit ${GERRIT_VERSION}..."
wget -q --show-progress https://gerrit-releases.storage.googleapis.com/gerrit-${GERRIT_VERSION}.war
else
echo " Gerrit ${GERRIT_VERSION} 已存在,跳过下载"
fi
echo -e "${GREEN}✓ Gerrit 安装包就绪${NC}"
echo ""
# 5. 重新初始化 Gerrit
echo -e "${YELLOW}[5/6] 初始化 Gerrit...${NC}"
cd ${GERRIT_HOME}
# 检查 Java 版本并使用 Java 17优先或 Java 11
JAVA17_HOME="/usr/local/java/jdk-17.0.12+7"
JAVA11_HOME="/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64"
if [ -d "$JAVA17_HOME" ]; then
export JAVA_HOME=$JAVA17_HOME
export PATH=$JAVA_HOME/bin:$PATH
echo " 使用 Java 17: $JAVA_HOME"
$JAVA_HOME/bin/java -version 2>&1 | head -1
elif [ -d "$JAVA11_HOME" ]; then
export JAVA_HOME=$JAVA11_HOME
export PATH=$JAVA_HOME/bin:$PATH
echo " 使用 Java 11: $JAVA_HOME"
$JAVA_HOME/bin/java -version 2>&1 | head -1
else
# 检查默认 Java 版本
JAVA_VERSION=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1)
if [ "$JAVA_VERSION" -lt 11 ]; then
echo -e "${RED}错误: 需要 Java 11 或更高版本,当前版本: $JAVA_VERSION${NC}"
echo "请先安装 Java 11 或 Java 17"
exit 1
fi
fi
# 非交互式初始化
echo " 正在初始化(这可能需要几分钟)..."
$JAVA_HOME/bin/java -jar gerrit-${GERRIT_VERSION}.war init \
-d review_site \
--batch \
--no-auto-start \
--install-plugin=download-commands \
--install-plugin=replication \
--install-plugin=reviewnotes || true
echo -e "${GREEN}✓ 初始化完成${NC}"
echo ""
# 6. 配置 Gerrit
echo -e "${YELLOW}[6/6] 配置 Gerrit...${NC}"
cd ${GERRIT_HOME}
# 创建配置文件(使用正确的 IP 和 Cookie 设置)
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}/
cookieSecure = false
cookieSameSite = LAX
[cache]
directory = cache
[index]
type = LUCENE
[receive]
enableSignedPush = false
EOCONFIG
echo -e "${GREEN}✓ 配置完成${NC}"
echo ""
# 7. 启动服务
echo -e "${YELLOW}启动 Gerrit 服务...${NC}"
cd ${GERRIT_HOME}/review_site
# 使用 Java 17 启动(如果可用),否则使用 Java 11
if [ -d "/usr/local/java/jdk-17.0.12+7" ]; then
JAVA_HOME=/usr/local/java/jdk-17.0.12+7 bin/gerrit.sh start
elif [ -d "/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64" ]; then
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64 bin/gerrit.sh start
else
bin/gerrit.sh start
fi
sleep 5
# 检查服务状态
if bin/gerrit.sh status | grep -q "Gerrit running"; then
echo -e "${GREEN}✓ 服务启动成功${NC}"
else
echo -e "${YELLOW}⚠ 服务可能未完全启动,请检查日志${NC}"
fi
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}重新安装完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "${YELLOW}访问信息:${NC}"
echo -e " Web 界面: http://${SERVER_IP}:${GERRIT_PORT}"
echo -e " SSH 端口: ${GERRIT_SSH_PORT}"
echo ""
echo -e "${YELLOW}首次登录:${NC}"
echo -e " 1. 访问 http://${SERVER_IP}:${GERRIT_PORT}"
echo -e " 2. 点击 'Sign In'"
echo -e " 3. 点击 'New Account' 注册新账户"
echo -e " 4. 第一个注册的用户将自动成为管理员"
echo ""
echo -e "${YELLOW}备份位置:${NC}"
echo -e " ${BACKUP_DIR}"
echo ""
echo -e "${YELLOW}常用命令:${NC}"
echo -e " 查看状态: cd ${GERRIT_HOME}/review_site && bin/gerrit.sh status"
echo -e " 查看日志: tail -f ${GERRIT_HOME}/review_site/logs/httpd_log"
echo -e " 停止服务: cd ${GERRIT_HOME}/review_site && bin/gerrit.sh stop"
echo -e " 重启服务: cd ${GERRIT_HOME}/review_site && bin/gerrit.sh restart"
echo ""
echo -e "${GREEN}========================================${NC}"