/** * 服务部署工具类 * 遵循阿里开发手册、大厂CI/CD标准 * * @param config 部署配置 * - environment: 环境标识 * - sshHost: SSH主机 * - sshUser: SSH用户 * - sshKey: SSH密钥路径 * - deployDir: 部署目录 * - composeFile: Compose文件名 */ def call(Map config = [:]) { // 默认配置 def environment = config.environment ?: env.ENVIRONMENT def sshHost = config.sshHost ?: env.SSH_HOST def sshUser = config.sshUser ?: env.SSH_USER def sshKey = config.sshKey ?: '/var/lib/jenkins/.ssh/id_rsa' def deployDir = config.deployDir ?: '/opt/fzx/deploy' def composeFile = config.composeFile ?: "podman-compose.${environment}.yml" echo "🚀 开始部署到 ${environment} 环境" // 创建部署目录 sh "ssh -i ${sshKey} -o StrictHostKeyChecking=no ${sshUser}@${sshHost} 'mkdir -p ${deployDir}'" // 备份旧版本配置 echo "📦 备份现有配置..." sh "ssh -i ${sshKey} -o StrictHostKeyChecking=no ${sshUser}@${sshHost} 'cp -r ${deployDir} /opt/fzx/backup/\$(date +%Y%m%d_%H%M%S) 2>/dev/null || true'" // 复制配置文件 echo "📄 复制配置文件..." sh "ssh -i ${sshKey} -o StrictHostKeyChecking=no ${sshUser}@${sshHost} 'cp -r ${env.WORKSPACE}/infrastructure/compose/* ${deployDir}/'" // 更新环境变量配置 echo "🔧 更新环境变量..." sh """ ssh -i ${sshKey} -o StrictHostKeyChecking=no ${sshUser}@${sshHost} 'cat > ${deployDir}/.env << EOF ENVIRONMENT=${environment} VERSION=${env.VERSION} IMAGE_REGISTRY=${env.IMAGE_REGISTRY} NACOS_ADDR=${env.NACOS_ADDR} NACOS_NAMESPACE=${env.NACOS_NAMESPACE} MARIADB_HOST=${env.MARIADB_HOST} REDIS_HOST=${env.REDIS_HOST} EOF' """ // 启动服务 echo "🔧 启动容器服务..." sh """ ssh -i ${sshKey} -o StrictHostKeyChecking=no ${sshUser}@${sshHost} 'cd ${deployDir} && COMPOSE_FILE=${composeFile} podman-compose up -d' """ // 等待服务启动 echo "⏳ 等待服务启动..." sleep 60 // 健康检查 echo "🧪 执行健康检查..." def healthCheck = sh script: """ ssh -i ${sshKey} -o StrictHostKeyChecking=no ${sshUser}@${sshHost} 'cd ${deployDir} && COMPOSE_FILE=${composeFile} podman-compose ps' """, returnStatus: true if (healthCheck == 0) { echo "✅ 部署成功" } else { error "部署失败" } }