Files
gerrit/install_jenkins.sh

246 lines
7.6 KiB
Bash
Raw Permalink Normal View History

2025-12-22 17:12:39 +08:00
#!/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