first commit
This commit is contained in:
248
install_gerrit.sh
Executable file
248
install_gerrit.sh
Executable file
@@ -0,0 +1,248 @@
|
||||
#!/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
|
||||
|
||||
Reference in New Issue
Block a user