java_demo/jenkins-docker/deploy-enterprise.sh
wangtianqi 7b8bd55554 feat: 完善Jenkins流水线配置
主要更新:
- 使用SSH私钥认证替代用户名密码认证
- 配置deploy-server-ssh-key凭据ID
- 修复Jenkinsfile格式和缩进问题
- 添加SSH配置指南和企业级部署文档

 技术改进:
- 使用sshagent进行安全的SSH连接
- 移除sshpass依赖,提升安全性
- 统一使用root@116.62.163.84进行部署
- 优化Docker镜像传输和部署流程

 新增文档:
- SSH_CONFIG_GUIDE.md - SSH私钥配置指南
- ENTERPRISE_JENKINS_GUIDE.md - 企业级Jenkins部署
- jenkins-docker/ - Jenkins Docker化部署方案
2025-06-23 21:14:09 +08:00

212 lines
5.4 KiB
Bash
Raw 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一键部署脚本
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "🚀 开始部署企业级Jenkins CI/CD平台..."
# 检查Docker环境
check_docker() {
if ! command -v docker &> /dev/null; then
echo "❌ Docker未安装请先安装Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose未安装请先安装Docker Compose"
exit 1
fi
if ! docker info &> /dev/null; then
echo "❌ Docker服务未运行请启动Docker"
exit 1
fi
}
# 创建必要目录
create_directories() {
echo "📁 创建项目目录结构..."
mkdir -p "${SCRIPT_DIR}/jenkins_data"
mkdir -p "${SCRIPT_DIR}/jenkins_data/workspace"
mkdir -p "${SCRIPT_DIR}/jenkins_data/jobs"
mkdir -p "${SCRIPT_DIR}/jenkins_data/plugins"
mkdir -p "${SCRIPT_DIR}/sonarqube_data"
# 设置权限
sudo chown -R 1000:1000 "${SCRIPT_DIR}/jenkins_data" || true
sudo chown -R 999:999 "${SCRIPT_DIR}/sonarqube_data" || true
}
# 构建和启动服务
deploy_services() {
echo "🐳 构建并启动Jenkins服务..."
cd "$SCRIPT_DIR"
# 构建自定义Jenkins镜像
docker-compose build jenkins
# 启动所有服务
docker-compose up -d
echo "⏳ 等待服务启动..."
sleep 60
}
# 检查服务状态
check_services() {
echo "📊 检查服务状态..."
# 检查Jenkins
if curl -s -f http://localhost:15008 > /dev/null; then
echo "✅ Jenkins服务正常运行"
else
echo "❌ Jenkins服务启动失败"
docker logs jenkins-custom --tail 50
exit 1
fi
# 检查SonarQube
if curl -s -f http://localhost:15010 > /dev/null; then
echo "✅ SonarQube服务正常运行"
else
echo "⚠️ SonarQube服务可能还在启动中..."
fi
}
# 获取初始密码
get_initial_password() {
echo "🔑 获取Jenkins初始密码..."
local password_file="${SCRIPT_DIR}/jenkins_data/secrets/initialAdminPassword"
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
if [ -f "$password_file" ]; then
echo "Jenkins初始密码:"
cat "$password_file"
break
elif docker exec jenkins-custom test -f /var/jenkins_home/secrets/initialAdminPassword 2>/dev/null; then
echo "Jenkins初始密码:"
docker exec jenkins-custom cat /var/jenkins_home/secrets/initialAdminPassword
break
else
echo "等待Jenkins生成初始密码... (尝试 $attempt/$max_attempts)"
sleep 10
((attempt++))
fi
done
if [ $attempt -gt $max_attempts ]; then
echo "⚠️ 无法获取初始密码,请手动查看容器日志"
docker logs jenkins-custom --tail 20
fi
}
# 显示访问信息
show_access_info() {
echo ""
echo "🎉 Jenkins CI/CD平台部署完成"
echo ""
echo "📋 访问信息:"
echo " 🌐 Jenkins: http://localhost:15008"
echo " 🌐 SonarQube: http://localhost:15010"
echo ""
echo "🔧 默认账号:"
echo " Jenkins: admin / (使用上面显示的初始密码)"
echo " SonarQube: admin / admin"
echo ""
echo "📁 数据目录:"
echo " Jenkins: ${SCRIPT_DIR}/jenkins_data"
echo " SonarQube: ${SCRIPT_DIR}/sonarqube_data"
echo ""
echo "🚀 快速开始:"
echo "1. 访问Jenkins并完成初始设置"
echo "2. 安装推荐插件(已预装核心插件)"
echo "3. 创建管理员用户"
echo "4. 导入示例项目: ${PROJECT_ROOT}"
echo "5. 使用 .ci-config.yml 配置项目构建"
echo ""
echo "📖 文档:"
echo " 配置指南: ${PROJECT_ROOT}/JENKINS_SETUP.md"
echo " 故障排查: ${PROJECT_ROOT}/JENKINS_TROUBLESHOOTING.md"
}
# 创建管理脚本
create_management_scripts() {
echo "📝 创建管理脚本..."
# 启动脚本
cat > "${SCRIPT_DIR}/start.sh" << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
docker-compose start
echo "✅ Jenkins服务已启动"
echo "🌐 访问地址: http://localhost:15008"
EOF
# 停止脚本
cat > "${SCRIPT_DIR}/stop.sh" << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
docker-compose stop
echo "✅ Jenkins服务已停止"
EOF
# 重启脚本
cat > "${SCRIPT_DIR}/restart.sh" << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
docker-compose restart
echo "✅ Jenkins服务已重启"
echo "🌐 访问地址: http://localhost:15008"
EOF
# 查看日志脚本
cat > "${SCRIPT_DIR}/logs.sh" << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
if [ "$1" = "sonar" ]; then
docker-compose logs -f sonarqube
else
docker-compose logs -f jenkins
fi
EOF
# 备份脚本
cat > "${SCRIPT_DIR}/backup.sh" << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
BACKUP_DIR="backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r jenkins_data "$BACKUP_DIR/"
cp -r sonarqube_data "$BACKUP_DIR/"
echo "✅ 备份完成: $BACKUP_DIR"
EOF
# 设置执行权限
chmod +x "${SCRIPT_DIR}"/*.sh
}
# 主函数
main() {
echo "企业级Jenkins CI/CD平台部署程序"
echo "================================="
check_docker
create_directories
deploy_services
check_services
get_initial_password
create_management_scripts
show_access_info
}
# 执行主函数
main "$@"