246 lines
7.6 KiB
Bash
246 lines
7.6 KiB
Bash
#!/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
|
||
|