#!/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