首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jenkins和Maven获取唯一的版本号

使用Jenkins和Maven获取唯一的版本号
EN

Stack Overflow用户
提问于 2013-09-03 21:33:02
回答 1查看 1.4K关注 0票数 3

我正在和Jenkins一起做一个多模块的maven项目。我有一个构建工作,我想打包我的项目与唯一的版本号,并将其部署到Nexus。

版本号应该是-其中"maven- version“是在根POM中维护的版本," build - number”是Jenkins的作业内部版本号。例如: 1.2.3-1234

我正在使用maven-versions-plugin来设置所需的版本号,但是我有一个问题,我希望在POM中维护版本(1.2.3)的第一部分。因此,我需要一种方法将POM中的版本导出到Jenkins环境变量中。

到目前为止,我还没有找到直接的方法来做到这一点。我的解决方案是使用groovy脚本,它会对POM进行分析,并将版本号写入一个临时属性文件。之后,我使用EnvInject插件创建环境变量,以便稍后作为"mvn versions:set“命令的版本号重新注入。

我的groovy脚本:

代码语言:javascript
复制
import jenkins.util.*;

def project = new XmlSlurper().parse(new File("pom.xml"))

def version = project.version.toString();
def mainversion = version.substring(0, version.indexOf("-SNAPSHOT"));

println "Version: $mainversion";

def versionFile = new File("v.properties");
versionFile << "VERSION=$mainversion"; 

这种通过属性文件的间接性是非常丑陋且容易出错的。有没有办法在groovy脚本中直接创建环境变量?可以使用系统groovy脚本,但这些类型的脚本始终在主服务器上执行。所以我的工作将不能在slaves上运行,这对我不起作用,因为我不会在master上执行构建。

EN

回答 1

Stack Overflow用户

发布于 2013-09-06 01:49:00

欢迎来到Jenkins链上下游变量问题的另一个版本。我假设您可能正在尝试进行某种持续集成管道。

在我的公司,我们用两种方法解决了这个问题:

选项1:通过执行sed搜索并在开头替换为执行shell来强制执行:

代码语言:javascript
复制
#sed -i '0,/<version>.*<\/version>/s/<version>.*<\/version>/<version>'${SVN_REVISION}'<\/version>/g' pom.xml;
#sed -i '0,/<name>.*<\/name>/s/<name>.*<\/name>/<name>'"${JOB_NAME}"'<\/name>/g' pom.xml;
#find . -name pom.xml | xargs sed -i 's/${build.number}/'${SVN_REVISION}'/g';

选项2:使用Artifactory而不是Nexus,并为Artifactory Pro付费。Artifactory jenkins插件的构建/发布管理功能为我们节省了数小时的痛苦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18593709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档