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

246 lines
7.6 KiB
Bash
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
# Jenkins 安装脚本(与 Gerrit 集成)
# 支持 CentOS/RHEL 系统
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置变量
JENKINS_PORT="${JENKINS_PORT:-8081}" # 避免与 Gerrit 8080 冲突
GERRIT_HOST="${GERRIT_HOST:-101.43.95.130}"
GERRIT_PORT="${GERRIT_PORT:-8080}"
GERRIT_SSH_PORT="${GERRIT_SSH_PORT:-29418}"
JENKINS_HOME="/opt/jenkins"
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Jenkins 自动化安装脚本${NC}"
echo -e "${GREEN}(与 Gerrit 集成)${NC}"
echo -e "${GREEN}========================================${NC}"
# 检测系统类型
detect_os() {
if [ -f /etc/redhat-release ]; then
OS="rhel"
OS_VERSION=$(cat /etc/redhat-release | sed 's/.*release \([0-9]\+\).*/\1/')
else
echo -e "${RED}当前脚本仅支持 CentOS/RHEL${NC}"
exit 1
fi
echo -e "${YELLOW}检测到系统: ${OS} ${OS_VERSION}${NC}"
}
# 检查 Java
check_java() {
echo -e "${GREEN}检查 Java 环境...${NC}"
if ! command -v java &> /dev/null; then
echo -e "${RED}未检测到 Java请先安装 Java 17${NC}"
echo -e "${YELLOW}运行: bash install_java17.sh${NC}"
exit 1
fi
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}"
exit 1
fi
echo -e "${GREEN}Java 版本: $(java -version 2>&1 | head -1)${NC}"
}
# 安装 Jenkins
install_jenkins() {
echo -e "${GREEN}安装 Jenkins...${NC}"
# 添加 Jenkins 仓库
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 安装 Jenkins
sudo yum install -y jenkins
echo -e "${GREEN}Jenkins 安装完成${NC}"
}
# 配置 Jenkins 端口
configure_jenkins() {
echo -e "${GREEN}配置 Jenkins 端口为 ${JENKINS_PORT}...${NC}"
# 修改 Jenkins 端口(避免与 Gerrit 冲突)
sudo sed -i "s/JENKINS_PORT=.*/JENKINS_PORT=${JENKINS_PORT}/" /etc/sysconfig/jenkins
# 设置 Jenkins 用户
sudo usermod -aG docker jenkins 2>/dev/null || true
echo -e "${GREEN}配置完成${NC}"
}
# 启动 Jenkins
start_jenkins() {
echo -e "${GREEN}启动 Jenkins 服务...${NC}"
sudo systemctl daemon-reload
sudo systemctl start jenkins
sudo systemctl enable jenkins
# 等待 Jenkins 启动
echo -e "${YELLOW}等待 Jenkins 启动(约 30 秒)...${NC}"
sleep 30
# 检查状态
if sudo systemctl is-active --quiet jenkins; then
echo -e "${GREEN}Jenkins 服务启动成功!${NC}"
else
echo -e "${RED}Jenkins 服务启动失败,请检查日志${NC}"
echo -e "${YELLOW}查看日志: sudo journalctl -u jenkins -f${NC}"
exit 1
fi
}
# 获取初始密码
get_initial_password() {
echo -e "${GREEN}获取 Jenkins 初始管理员密码...${NC}"
if [ -f /var/lib/jenkins/secrets/initialAdminPassword ]; then
INITIAL_PASSWORD=$(sudo cat /var/lib/jenkins/secrets/initialAdminPassword)
echo -e "${YELLOW}初始管理员密码: ${INITIAL_PASSWORD}${NC}"
else
echo -e "${YELLOW}未找到初始密码文件,可能已初始化${NC}"
fi
}
# 安装 Gerrit Trigger 插件(通过 CLI
install_gerrit_plugin() {
echo -e "${GREEN}准备安装 Gerrit Trigger 插件...${NC}"
echo -e "${YELLOW}注意: 插件需要在 Jenkins Web 界面中安装${NC}"
echo -e "${YELLOW}或使用以下命令(需要 Jenkins 已初始化):${NC}"
echo -e "${YELLOW} java -jar /var/lib/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:${JENKINS_PORT} install-plugin gerrit-trigger${NC}"
}
# 创建 Gerrit 集成配置示例
create_gerrit_config_example() {
echo -e "${GREEN}创建 Gerrit 集成配置示例...${NC}"
cat > /tmp/gerrit_integration_guide.txt << EOF
========================================
Gerrit 与 Jenkins 集成配置指南
========================================
1. 访问 Jenkins Web 界面
URL: http://${GERRIT_HOST}:${JENKINS_PORT}
2. 使用初始密码登录(见上方输出)
3. 安装 Gerrit Trigger 插件
- 管理 Jenkins → 插件管理 → 可用插件
- 搜索 "Gerrit Trigger"
- 安装并重启 Jenkins
4. 配置 Gerrit Server
- 管理 Jenkins → 系统配置 → Gerrit Trigger
- 添加 Gerrit Server:
* Name: Gerrit-Server
* Frontend URL: http://${GERRIT_HOST}:${GERRIT_PORT}
* SSH Port: ${GERRIT_SSH_PORT}
* Username: admin或您的 Gerrit 用户名)
* SSH Keyfile: /var/lib/jenkins/.ssh/id_rsa
5. 配置 SSH 密钥
- 确保 Jenkins 用户有访问 Gerrit 的 SSH 密钥
- 将您的 SSH 私钥复制到: /var/lib/jenkins/.ssh/id_rsa
- 设置权限: sudo chown jenkins:jenkins /var/lib/jenkins/.ssh/id_rsa
- 设置权限: sudo chmod 600 /var/lib/jenkins/.ssh/id_rsa
6. 测试连接
- 在 Gerrit Trigger 配置中点击 "Test Connection"
- 如果成功,会显示 Gerrit 版本信息
7. 创建流水线任务
- 新建任务 → 流水线
- 在 Pipeline 脚本中配置 Gerrit Trigger
示例 Pipeline 脚本:
pipeline {
agent any
triggers {
gerrit(
serverName: 'Gerrit-Server',
events: [changeMerged(), patchsetCreated()],
project: 'plain:.*',
branch: 'plain:.*'
)
}
stages {
stage('构建') {
steps {
sh 'echo "开始构建..."'
}
}
}
}
========================================
EOF
echo -e "${GREEN}配置指南已保存到: /tmp/gerrit_integration_guide.txt${NC}"
}
# 输出访问信息
print_info() {
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Jenkins 安装完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo -e "${YELLOW}访问地址:${NC}"
echo -e " Jenkins Web 界面: http://${GERRIT_HOST}:${JENKINS_PORT}"
echo -e " Gerrit Web 界面: http://${GERRIT_HOST}:${GERRIT_PORT}"
echo -e ""
echo -e "${YELLOW}初始管理员密码:${NC}"
if [ -f /var/lib/jenkins/secrets/initialAdminPassword ]; then
INITIAL_PASSWORD=$(sudo cat /var/lib/jenkins/secrets/initialAdminPassword)
echo -e " ${INITIAL_PASSWORD}"
else
echo -e " (未找到,可能已初始化)"
fi
echo -e ""
echo -e "${YELLOW}常用命令:${NC}"
echo -e " 启动: sudo systemctl start jenkins"
echo -e " 停止: sudo systemctl stop jenkins"
echo -e " 重启: sudo systemctl restart jenkins"
echo -e " 状态: sudo systemctl status jenkins"
echo -e " 日志: sudo journalctl -u jenkins -f"
echo -e ""
echo -e "${YELLOW}配置文件位置:${NC}"
echo -e " Jenkins 配置: /var/lib/jenkins/config.xml"
echo -e " Jenkins 端口: /etc/sysconfig/jenkins"
echo -e ""
echo -e "${YELLOW}下一步:${NC}"
echo -e " 1. 访问 http://${GERRIT_HOST}:${JENKINS_PORT}"
echo -e " 2. 使用初始密码登录"
echo -e " 3. 安装 Gerrit Trigger 插件"
echo -e " 4. 配置 Gerrit 连接"
echo -e " 5. 查看配置指南: cat /tmp/gerrit_integration_guide.txt"
echo -e "${GREEN}========================================${NC}"
}
# 主函数
main() {
detect_os
check_java
install_jenkins
configure_jenkins
start_jenkins
get_initial_password
create_gerrit_config_example
print_info
}
# 执行主函数
main