在处理POM之后,Jenkins构建是否有任何方法可以了解项目的Maven版本号?
我有一些项目,其中版本控制由Maven控制,在后期构建工作中,我们想创建一个Debian包并调用一些shell脚本.我需要的是Maven以前作为Jenkins环境变量可用的版本号,所以我可以将它传递给后期构建操作.
需要明确的是,我没有需要知道如何让詹金斯版本号传递到Maven的; 相反,我希望Maven将版本号传递给Jenkins!
Nil*_*ese 63
您可以使用https://issues.jenkins-ci.org/browse/JENKINS-18272中引入的$ {POM_VERSION}变量
Eng*_*_DJ 22
经过大量的挖掘(我从来没有意识到Jenkins的文档记录是多么糟糕!)我找到了一个非常简单的解决方案.
Post Step到您的Maven构建类型Execute **system** Groovy script脚本:
import hudson.model.*;
import hudson.util.*;
def thr = Thread.currentThread();
def currentBuild = thr?.executable;
def mavenVer = currentBuild.getParent().getModules().toArray()[0].getVersion();
def newParamAction = new hudson.model.ParametersAction(new hudson.model.StringParameterValue("MAVEN_VERSION", mavenVer));
currentBuild.addAction(newParamAction);
Run Code Online (Sandbox Code Playgroud)
调用的构建环境变量MAVEN_VERSION现在可用于以通常的方式(${MAVEN_VERSION})替换到其他构建后的步骤.我正在使用它进行Git标记等.
Ako*_*kom 10
正如其他答案已经指出的那样,如果您使用的是Maven项目类型,则可以访问$ POM_VERSION变量.但如果你不是,你可以使用这一系列步骤(丑陋但可靠).这样做依赖于相同版本的maven来确定pom版本(同时处理复杂的父/子pom继承,其中<version>甚至可能不存在于子代中).
Maven迈出了这个目标:
org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version -l version.log
Shell步骤 :(您可能需要根据您的层次结构调整version.log的路径)
echo "POM_VERSION=$(grep -v '\[' version.log)" > props.properties
注入环境变量步骤(Environment Injector Plugin):
属性文件路径: props.properties
现在你可以使用$ POM_VERSION,就好像这是一个Maven项目.
这样做:使用maven打印出版本以及一堆输出,然后将输出的混乱留下来,只留下版本,使用属性文件格式将其写入文件,然后将其注入构建环境.这比单线程更好的原因是mvn ..... | grep -v '\['使用Maven步骤不会对已安装的maven版本做出假设,并且将通过与任何其他maven步骤相同的自动安装来处理.
I used Pipeline Utility Steps plugin in a declarative pipeline job to get Maven version. In the example below I use script variable instead of environment variable, because that can be modified and passed between stages.
def TAG_SELECTOR = "UNINTIALIZED"
pipeline {
agent any
stages {
stage('Build') {
steps {
sh "mvn --batch-mode -U deploy"
script {
TAG_SELECTOR = readMavenPom().getVersion()
}
echo("TAG_SELECTOR=${TAG_SELECTOR}")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Note: You must approve the getVersion() method after creating the job in Manage jenkins > In-process Script Approval.
See also:
| 归档时间: |
|
| 查看次数: |
59757 次 |
| 最近记录: |