From 68dcd267baf509ce68bece3dd64034cd6ec1660e Mon Sep 17 00:00:00 2001 From: gitadmin Date: Tue, 23 Sep 2025 21:56:06 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E5=85=A5=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/nexus/stages/BuildService copy.groovy | 396 ------------------ 1 file changed, 396 deletions(-) delete mode 100644 src/com/nexus/stages/BuildService copy.groovy diff --git a/src/com/nexus/stages/BuildService copy.groovy b/src/com/nexus/stages/BuildService copy.groovy deleted file mode 100644 index ac12bf0..0000000 --- a/src/com/nexus/stages/BuildService copy.groovy +++ /dev/null @@ -1,396 +0,0 @@ -package com.nexus.stages - -/** - * 构建阶段服务 - 负责Maven项目的编译和打包,支持Nexus私库发布 - * - * 主要职责: - * - 执行Maven项目的清理、编译、打包、部署操作 - * - 验证构建环境和配置的有效性 - * - 处理构建过程中的异常和错误 - * - 提供构建结果的状态反馈 - * - 支持Nexus私库发布和依赖管理 - * - * 设计原则: - * - 单一职责:专注于Maven构建相关的逻辑 - * - 可重用性:可以在不同的流水线项目中重用 - * - 错误隔离:构建失败不会影响其他服务实例 - * - 配置驱动:通过参数Map接收所有配置信息 - * - * @see Serializable 实现序列化接口,支持Jenkins流水线的暂停和恢复 - */ -class BuildService implements Serializable { - - /** - * Jenkins pipeline脚本对象 - * 用于访问Jenkins DSL方法,如sh、echo、error等 - * 类型: Object (通常是Jenkins pipeline的script对象) - */ - def script - - /** - * 环境配置信息 - * 存储构建环境特定的配置参数 - * 类型: Map 键值对配置映射 - */ - def envConfig - - /** - * 构造函数 - 初始化构建服务 - * - * @param script Jenkins pipeline脚本对象(必须) - * - 用途:用于在服务中访问Jenkins DSL方法 - * - 示例:在Pipeline中通过`this`传递当前脚本上下文 - * - * @param envConfig 环境配置信息(可选) - * - 类型:Map 键值对配置映射 - * - 默认值:空Map [:] - * - 内容:构建环境相关的配置参数 - */ - BuildService(script, envConfig = [:]) { - this.script = script - this.envConfig = envConfig - - script.echo "🔧 BuildService 初始化完成" - } - - /** - * 执行构建阶段逻辑 - 增强版,支持Nexus私库发布 - * 负责Maven项目的完整构建生命周期,包括清理、编译、测试、打包、部署 - * - * 主要步骤: - * 1. 输出构建开始信息和配置详情 - * 2. 验证环境配置的有效性 - * 3. 执行Maven构建命令(包含依赖清理和Nexus部署) - * 4. 处理构建结果和异常 - * 5. 生成构建报告 - * - * @param params 管道参数Map,包含构建所需的所有配置信息,必须包含: - * - MAVEN_SET: String - Maven设置文件ID(Jenkins Config File ID) - * - PROFILES: String - Maven构建环境profiles(如:dev, test, prod) - * 可选字段: - * - jarFilePath: String - JAR文件输出路径(默认:target) - * - jarFile: String - 生成的JAR文件名 - * - skipTests: Boolean - 是否跳过测试(默认:true) - * - goals: String - Maven执行目标 - * - pomFilePath: String - POM文件路径(默认:pom.xml) - * - orgName: String - 组织名称(用于JDK服务验证) - * - availableProfiles: List - 可用的环境profile列表 - * - branchConfig: Map - 分支配置信息 - * - currentNexusConfig: Map - 当前Nexus配置 - * - repositoryPolicy: String - 仓库策略 - * - publishStrategy: Map - 发布策略配置 - * - * @throws Exception 当Maven构建失败时抛出异常,中断流水线 - * 异常信息包含详细的错误原因和建议解决方案 - * - * @example 使用示例: - * def buildParams = [ - * MAVEN_SET: "nexus-maven-dev", - * PROFILES: "dev", - * jarFilePath: "target", - * jarFile: "xiaomayi-common.jar", - * skipTests: true, - * orgName: "xiaomayi", - * availableProfiles: ["dev", "test", "prod"], - * branchConfig: [maven: [deploy: true]], - * currentNexusConfig: [url: "http://nexus/repository/maven-snapshots/"], - * repositoryPolicy: "snapshots" - * ] - * buildService.executeBuildStage(buildParams) - */ - def executeBuildStage(params) { - try { - // 输出构建开始信息和配置详情 - script.echo "🏗️ 开始构建阶段..." - - printBuildConfiguration(params) - - // 验证环境profile的有效性(确保配置的一致性) - validateProfile(params) - - // 执行Maven构建命令 - executeMavenBuild(params) - - // 构建成功完成,生成报告 - generateBuildReport(params) - - } catch (Exception e) { - // 构建失败处理 - handleBuildFailure(e, params) - // 重新抛出异常,确保流水线标记为失败状态 - throw e - } - } - - /** - * 打印构建配置详情 - * 显示所有构建相关的配置信息,便于调试和验证 - * - * @param params 构建参数Map - */ - private def printBuildConfiguration(params) { - script.echo "📋 构建配置详情:" - script.echo " 🔧 Maven配置: ${params.MAVEN_SET}" - script.echo " 🌍 构建Profile: ${params.PROFILES}" - script.echo " 📦 输出路径: ${params.jarFilePath ?: 'target'}" - script.echo " 🏷️ JAR文件: ${params.jarFile ?: '未指定'}" - script.echo " ⚡ 跳过测试: ${params.skipTests ?: true}" - script.echo " 📄 POM文件: ${params.pomFilePath ?: 'pom.xml'}" - - // 显示Nexus相关配置 - if (params.currentNexusConfig) { - script.echo " 🔗 Nexus仓库: ${params.currentNexusConfig.url}" - script.echo " 🎯 仓库策略: ${params.repositoryPolicy ?: 'releases'}" - } - - // 显示发布策略 - if (params.publishStrategy) { - script.echo " 🚀 自动发布: ${params.publishStrategy.autoPublish ?: 'false'}" - script.echo " 🔏 GPG签名: ${params.publishStrategy.signArtifacts ?: 'false'}" - } - } - - /** - * 执行Maven构建命令 - * 使用Config File Provider动态加载Maven配置,执行完整的构建生命周期 - * - * @param params 构建参数Map - */ - private def executeMavenBuild(params) { - script.echo "🔨 执行Maven构建命令..." - - // 使用Config File Provider加载Maven settings.xml - script.configFileProvider([script.configFile(fileId: params.MAVEN_SET, variable: 'MAVEN_SETTINGS_XML')]) { - - // 构建Maven命令参数 - def mavenGoals = buildMavenGoals(params) - def mavenOptions = buildMavenOptions(params) - - script.sh """ - # ================================================ - # 小蚂蚁核心库Maven构建脚本 - # 环境: ${params.PROFILES} - # 时间: \$(date) - # ================================================ - - echo "🚀 开始执行Maven构建..." - - # 显示Maven版本信息 - /usr/local/maven/bin/mvn --version - - # 显示当前工作目录和POM文件 - echo "📁 工作目录: \$(pwd)" - echo "📄 POM文件: ${params.pomFilePath ?: 'pom.xml'}" - echo "🔧 Settings文件: \${MAVEN_SETTINGS_XML}" - - # 执行Maven构建命令 - echo "🔨 执行命令: /usr/local/maven/bin/mvn --settings \${MAVEN_SETTINGS_XML} ${mavenGoals} ${mavenOptions}" - - /usr/local/maven/bin/mvn \\ - --settings \${MAVEN_SETTINGS_XML} \\ - -f ${params.pomFilePath ?: 'pom.xml'} \\ - ${mavenGoals} ${mavenOptions} - - # 检查构建结果 - BUILD_RESULT=\$? - if [ \$BUILD_RESULT -eq 0 ]; then - echo "✅ Maven构建成功完成!" - else - echo "❌ Maven构建失败,退出码: \$BUILD_RESULT" - exit \$BUILD_RESULT - fi - """ - } - } - - /** - * 构建Maven执行目标 - * 根据参数配置生成合适的Maven goals - * - * @param params 构建参数Map - * @return Maven goals字符串 - */ - private def buildMavenGoals(params) { - def goals = [] - - // 添加依赖清理(针对小蚂蚁依赖) - goals.add("dependency:purge-local-repository -Dinclude=com.xiaomayi") - - // 添加标准构建生命周期 - goals.add("clean") - - // 根据分支配置决定是否部署 - if (params.branchConfig?.maven?.deploy) { - goals.add("deploy") - script.echo " 🚀 启用部署到Nexus仓库" - } else { - goals.add("install") - script.echo " 💾 仅安装到本地仓库" - } - - goals.add("package") - - return goals.join(" ") - } - - /** - * 构建Maven选项参数 - * 根据配置生成Maven命令行选项 - * - * @param params 构建参数Map - * @return Maven选项字符串 - */ - private def buildMavenOptions(params) { - def options = [] - - // 强制更新依赖 - options.add("-U") - - // 跳过测试配置 - if (params.skipTests ?: true) { - options.add("-Dmaven.test.skip=true") - script.echo " ⚡ 跳过单元测试" - } else { - script.echo " ✅ 执行单元测试" - } - - // 添加Maven profile(如果指定) - if (params.PROFILES) { - options.add("-P${params.PROFILES}") - } - - // 添加分支配置中的额外选项 - if (params.branchConfig?.maven?.options) { - options.add(params.branchConfig.maven.options) - } - - return options.join(" ") - } - - /** - * 生成构建报告 - * 构建成功后生成详细的构建结果报告 - * - * @param params 构建参数Map - */ - private def generateBuildReport(params) { - script.echo "📊 构建阶段完成报告:" - script.echo " - ✅ 依赖清理完成(com.xiaomayi)" - script.echo " - ✅ 代码编译完成" - script.echo " - ${params.skipTests ? '⚡ 单元测试跳过' : '✅ 单元测试通过'}" - script.echo " - ✅ 打包完成" - - // 显示部署状态 - def deployStatus = params.branchConfig?.maven?.deploy ? "已部署到Nexus" : "未部署" - script.echo " - 📦 部署状态: ${deployStatus}" - - if (params.branchConfig?.maven?.deploy) { - script.echo " 🎯 目标仓库: ${params.currentNexusConfig?.url ?: '默认仓库'}" - script.echo " 📋 仓库策略: ${params.repositoryPolicy ?: 'releases'}" - } - - // 显示GPG签名状态 - if (params.publishStrategy?.signArtifacts) { - script.echo " - 🔏 GPG签名: 已启用(密钥: ${params.publishStrategy.gpgKeyId ?: '默认密钥'})" - } - - // 显示生成的构件信息 - script.echo "🎉 构建产物已生成到: ${params.jarFilePath ?: 'target'} 目录" - - // 尝试列出生成的JAR文件 - try { - def jarFiles = script.findFiles(glob: "${params.jarFilePath ?: 'target'}/*.jar") - if (jarFiles) { - script.echo "📦 生成的构件:" - jarFiles.each { file -> - script.echo " - ${file.name} (${file.length()} bytes)" - } - } - } catch (Exception e) { - script.echo " ℹ️ 无法列出构件文件: ${e.message}" - } - } - - /** - * 处理构建失败情况 - * 提供详细的错误信息和调试建议 - * - * @param e 异常对象 - * @param params 构建参数Map - */ - private def handleBuildFailure(Exception e, params) { - script.echo "❌ 构建阶段失败: ${e.message}" - script.echo "💡 建议检查:" - script.echo " - Maven settings.xml 配置是否正确" - script.echo " - Nexus仓库连接是否正常(地址: ${params.currentNexusConfig?.url ?: '未配置'})" - script.echo " - 网络连接是否正常(依赖下载)" - script.echo " - 代码编译是否有语法错误" - script.echo " - 单元测试是否通过" - script.echo " - 版本号冲突或依赖问题" - - // 显示当前环境信息用于调试 - script.echo "🔍 调试信息:" - script.echo " - 环境: ${params.PROFILES}" - script.echo " - Maven配置: ${params.MAVEN_SET}" - script.echo " - POM文件: ${params.pomFilePath ?: 'pom.xml'}" - } - - /** - * 验证环境profile有效性 - * 检查选择的部署环境是否在可用环境列表中,确保部署配置的正确性 - * - * 主要功能: - * - 验证必要参数的存在性和有效性 - * - 检查所选环境是否在可用环境列表中 - * - 提供详细的错误信息和调试建议 - * - * @param params 参数Map,必须包含以下字段: - * - PROFILES: String - 要验证的环境profile名称 - * - availableProfiles: List - 可用的环境profile列表 - * - orgName: String - 组织名称(用于日志和错误消息) - * - * @throws IllegalArgumentException 当缺少必要参数或参数无效时抛出 - * @throws Exception 当环境验证失败时抛出,包含详细的错误信息 - */ - private def validateProfile(params) { - script.echo "🔍 开始验证环境profile有效性..." - - // 参数完整性检查 - if (!params.PROFILES) { - def errorMsg = "缺少必要的PROFILES参数,请指定要部署的环境" - script.echo "❌ ${errorMsg}" - throw new IllegalArgumentException(errorMsg) - } - - if (!params.availableProfiles || params.availableProfiles.isEmpty()) { - def errorMsg = "缺少可用的环境profile列表,请检查配置文件中环境配置" - script.echo "❌ ${errorMsg}" - throw new IllegalArgumentException(errorMsg) - } - - if (!params.orgName) { - script.echo "⚠️ 缺少组织名称参数orgName,使用默认标识" - } - - // 环境有效性验证 - try { - def selectedProfile = params.PROFILES.trim() - def availableProfiles = params.availableProfiles.collect { it.toString().trim() } - - script.echo "📋 验证详情:" - script.echo " 🎯 选择的环境: ${selectedProfile}" - script.echo " 📊 可用环境: ${availableProfiles.join(', ')}" - - if (!availableProfiles.contains(selectedProfile)) { - def errorMsg = "无效的部署环境: '${selectedProfile}'。可用环境: ${availableProfiles.join(', ')}" - script.error("环境验证失败: ${errorMsg}") - } - - script.echo "✅ 环境profile验证通过: ${selectedProfile}" - } catch (Exception e) { - script.echo "❌ 环境profile验证过程中发生错误: ${e.message}" - script.echo "📋 可用环境列表: ${params.availableProfiles.join(', ')}" - throw e - } - } -} \ No newline at end of file