261 lines
7.8 KiB
Bash
Executable File
261 lines
7.8 KiB
Bash
Executable File
#!/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}"
|
||
|