签入版本

This commit is contained in:
gitadmin 2025-09-23 21:56:06 +08:00
parent a398663400
commit 68dcd267ba

View File

@ -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方法shechoerror等
* : Object (Jenkins pipeline的script对象)
*/
def script
/**
*
*
* : Map<String, Object>
*/
def envConfig
/**
* -
*
* @param script Jenkins pipeline脚本对象
* - 访Jenkins DSL方法
* - Pipeline中通过`this`
*
* @param envConfig
* - Map<String, Object>
* - 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设置文件IDJenkins Config File ID
* - PROFILES: String - Maven构建环境profilesdev, 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<String> - 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
}
}
}