You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins前置Shell脚本中获取maven-release-plugin的发布版本

解决Jenkins中Maven Release前置Shell脚本无法获取发布版本的问题

我明白你遇到的困境了——在Jenkins的Maven Release任务里,启用了「在SCM运行前执行构建步骤」的Shell脚本,但死活拿不到发布版本,试了$releaseVersion也没用,只能看到Maven命令里带着-DdevelopmentVersion参数对吧?

其实核心原因是:maven-release-plugin计算出的releaseVersion默认不会暴露为Jenkins的环境变量,而且在「Pre SCM步骤」这个阶段,插件还没把这些版本变量传递给Shell的执行环境,直接用$releaseVersion自然拿不到值。

下面给你几个实用的解决方案,根据你的场景选就行:

方法一:自动解析当前POM版本生成Release版本(适用于默认版本规则)

如果你的Release版本就是当前POM里的SNAPSHOT版本去掉-SNAPSHOT后缀(比如0.0.33-SNAPSHOT对应0.0.33),可以直接在Shell脚本里用Maven命令提取并处理:

# 从POM中读取当前版本,去掉-SNAPSHOT得到Release版本
RELEASE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout | sed 's/-SNAPSHOT//')
# 验证一下结果
echo "即将发布的版本是:$RELEASE_VERSION"

这个方法简单直接,但如果是手动指定了非默认的Release版本(比如跳过自动递增,手动输入了一个不同的版本号),就会失效。

方法二:通过Dry-Run生成配置文件读取真实Release版本(通用场景)

不管你是让插件自动生成版本,还是手动指定版本,这个方法都能拿到准确的Release版本——先让maven-release-plugin执行一次模拟准备(dry-run),生成包含版本信息的release.properties文件,再从中提取值:

# 执行dry-run,模拟release:prepare过程,生成release.properties
mvn release:prepare -DdryRun=true -DskipTests
# 从生成的配置文件中提取Release版本
RELEASE_VERSION=$(grep 'release.version' target/checkout/release.properties | cut -d'=' -f2)
echo "获取到的Release版本:$RELEASE_VERSION"
# 可选:清理dry-run生成的临时文件,避免影响后续正式发布流程
mvn release:clean

这个方法的优势是能精准获取插件最终确定的Release版本,完全匹配后续正式发布的版本号,唯一要注意的是执行完dry-run后记得清理临时文件。

方法三:Pipeline任务中的变量捕获(如果用Jenkins Pipeline)

如果你的Jenkins任务是Pipeline类型,可以直接在调用Maven Release插件时捕获releaseVersion变量,然后传递给前置脚本:

def releaseVersion
stage('Maven Release') {
    mavenRelease {
        // 这里可以手动指定版本,或者留空让插件自动生成
        releaseVersion('1.0.0')
        // 配置前置SCM步骤
        preScmSteps {
            shell script: "echo 准备发布版本:${releaseVersion}"
        }
        // 其他Release配置...
    }
}

这个方式更贴合Pipeline的流程,变量传递也更直接,但只适用于Pipeline任务,自由风格任务用前面两种方法更合适。

内容的提问来源于stack exchange,提问作者animesh143

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:15:05