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

261 lines
7.8 KiB
Bash
Executable File
Raw Permalink 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 升级到最新版本(支持 JDK 17
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"
# JDK 17 路径
JAVA17_HOME="/usr/local/java/jdk-17.0.12+7"
if [ ! -d "$JAVA17_HOME" ]; then
# 尝试其他可能的位置
JAVA17_HOME="/opt/java17"
if [ ! -d "$JAVA17_HOME" ]; then
echo -e "${RED}错误: 未找到 JDK 17${NC}"
echo "请先安装 JDK 17 或修改脚本中的 JAVA17_HOME 路径"
exit 1
fi
fi
export JAVA_HOME=$JAVA17_HOME
export PATH=$JAVA_HOME/bin:$PATH
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Gerrit 升级脚本${NC}"
echo -e "${GREEN}目标版本: ${GERRIT_VERSION}${NC}"
echo -e "${GREEN}使用 JDK: ${JAVA_HOME}${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
# 验证 Java 17
echo -e "${YELLOW}[1/7] 验证 Java 17 安装...${NC}"
$JAVA_HOME/bin/java -version 2>&1 | head -1
if ! $JAVA_HOME/bin/java -version 2>&1 | grep -q "17"; then
echo -e "${RED}错误: 指定的 Java 不是版本 17${NC}"
exit 1
fi
echo -e "${GREEN}✓ Java 17 验证通过${NC}"
echo ""
# 1. 停止现有服务
echo -e "${YELLOW}[2/7] 停止现有 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 3
echo -e "${GREEN}✓ 服务已停止${NC}"
else
echo -e "${YELLOW}⚠ Gerrit 服务脚本不存在,可能未运行${NC}"
fi
else
echo -e "${YELLOW}⚠ review_site 目录不存在,将进行全新安装${NC}"
fi
echo ""
# 2. 备份现有数据
echo -e "${YELLOW}[3/7] 备份现有数据...${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
# 备份插件
if [ -d "${GERRIT_HOME}/review_site/plugins" ]; then
echo " 备份插件..."
cp -r ${GERRIT_HOME}/review_site/plugins ${BACKUP_DIR}/ 2>/dev/null || true
fi
echo -e "${GREEN}✓ 数据已备份到: ${BACKUP_DIR}${NC}"
else
echo -e "${YELLOW}⚠ 没有现有数据需要备份${NC}"
fi
echo ""
# 3. 下载新版本 Gerrit
echo -e "${YELLOW}[4/7] 下载 Gerrit ${GERRIT_VERSION}...${NC}"
cd ${GERRIT_HOME}
if [ ! -f "gerrit-${GERRIT_VERSION}.war" ]; then
echo " 正在下载 Gerrit ${GERRIT_VERSION}..."
wget -q https://gerrit-releases.storage.googleapis.com/gerrit-${GERRIT_VERSION}.war
if [ $? -ne 0 ]; then
echo -e "${RED}下载失败,请检查网络连接${NC}"
exit 1
fi
echo -e "${GREEN}✓ 下载完成${NC}"
else
echo -e "${GREEN}✓ Gerrit ${GERRIT_VERSION} 已存在,跳过下载${NC}"
fi
echo ""
# 4. 升级 Gerrit如果已存在
if [ -d "${GERRIT_HOME}/review_site" ]; then
echo -e "${YELLOW}[5/7] 升级 Gerrit...${NC}"
cd ${GERRIT_HOME}
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 2>&1 | tail -20
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 升级完成${NC}"
else
echo -e "${YELLOW}⚠ 升级过程中可能有警告,但可能已成功完成${NC}"
fi
else
echo -e "${YELLOW}[5/7] 初始化 Gerrit全新安装...${NC}"
cd ${GERRIT_HOME}
echo " 正在初始化(这可能需要几分钟)..."
$JAVA_HOME/bin/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 2>&1 | tail -20
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 初始化完成${NC}"
else
echo -e "${YELLOW}⚠ 初始化过程中可能有警告,但可能已成功完成${NC}"
fi
fi
echo ""
# 5. 配置 Gerrit
echo -e "${YELLOW}[6/7] 配置 Gerrit...${NC}"
cd ${GERRIT_HOME}
# 如果配置文件不存在,创建它
if [ ! -f "review_site/etc/gerrit.config" ]; then
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
gitBasicAuth = true
[sshd]
listenAddress = *:${GERRIT_SSH_PORT}
[httpd]
listenUrl = http://*:${GERRIT_PORT}/
cookieSecure = false
cookieSameSite = LAX
cookiePath = /
[cache]
directory = cache
[index]
type = LUCENE
[receive]
enableSignedPush = false
EOCONFIG
echo -e "${GREEN}✓ 配置文件已创建${NC}"
else
# 更新现有配置(保留用户自定义设置)
echo -e "${GREEN}✓ 使用现有配置文件${NC}"
fi
echo ""
# 6. 启动服务
echo -e "${YELLOW}[7/7] 启动 Gerrit 服务...${NC}"
cd ${GERRIT_HOME}/review_site
# 确保使用 Java 17
export JAVA_HOME=$JAVA17_HOME
export PATH=$JAVA_HOME/bin:$PATH
# 更新 gerrit.sh 脚本以使用 Java 17如果存在
if [ -f "bin/gerrit.sh" ]; then
# 备份原脚本
cp bin/gerrit.sh bin/gerrit.sh.bak
# 在脚本开头添加 JAVA_HOME 设置(如果还没有)
if ! grep -q "JAVA_HOME.*jdk-17" bin/gerrit.sh; then
sed -i "2i export JAVA_HOME=${JAVA17_HOME}" bin/gerrit.sh
sed -i "3i export PATH=\$JAVA_HOME/bin:\$PATH" bin/gerrit.sh
fi
fi
# 启动服务
bin/gerrit.sh start
sleep 5
# 检查服务状态
if bin/gerrit.sh status 2>&1 | grep -q "Gerrit running\|Running"; then
echo -e "${GREEN}✓ 服务启动成功${NC}"
else
echo -e "${YELLOW}⚠ 服务可能未完全启动,请检查日志${NC}"
echo -e "${YELLOW}查看日志: tail -f ${GERRIT_HOME}/review_site/logs/error_log${NC}"
fi
echo ""
# 输出信息
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}升级完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "${YELLOW}版本信息:${NC}"
echo -e " Gerrit 版本: ${GERRIT_VERSION}"
echo -e " Java 版本: $($JAVA_HOME/bin/java -version 2>&1 | head -1)"
echo ""
echo -e "${YELLOW}访问信息:${NC}"
echo -e " Web 界面: http://${SERVER_IP}:${GERRIT_PORT}"
echo -e " SSH 端口: ${GERRIT_SSH_PORT}"
echo ""
echo -e "${YELLOW}备份位置:${NC}"
if [ -d "${BACKUP_DIR}" ]; then
echo -e " ${BACKUP_DIR}"
fi
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/error_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}"