我正在和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脚本:
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上执行构建。
发布于 2013-09-06 01:49:00
欢迎来到Jenkins链上下游变量问题的另一个版本。我假设您可能正在尝试进行某种持续集成管道。
在我的公司,我们用两种方法解决了这个问题:
选项1:通过执行sed搜索并在开头替换为执行shell来强制执行:
#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插件的构建/发布管理功能为我们节省了数小时的痛苦。
https://stackoverflow.com/questions/18593709
复制相似问题