如何从詹金斯访问maven属性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从詹金斯访问maven属性?相关的知识,希望对你有一定的参考价值。
我有一个maven项目,我有一个属性。我想从Jenkins访问它。
POM片段:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<timestamp>${build.time}</timestamp>
<outputFolder>C:/AutomationTestReports/${project.name}/ExecutionReport${timestamp}</outputFolder>
</properties>
此输出文件夹属性在运行时进行评估。我想在Jenkins中访问此属性以导航到根据时间戳生成的输出文件夹。为此,我需要在Jenkins中捕获此输出文件夹属性,这是我无法做到的。
仅使用此输出文件夹,我将能够导航到该文件夹以访问结果文件。
问题:如何从Jenkins作业访问Maven属性?
Jenkins Maven作业默认提供一些在作业配置期间使用的maven properties,但是它不能提供对pom文件中定义的其他属性的任何简单访问。
因此,需要一种定制方法。这是一个使用groovy脚本的工作解决方案,可用于在构建时将任何已定义的Maven属性转换为新的Jenkins变量,然后在其他后期构建步骤中进一步使用。
此解决方案的预先要求是:
- Groovy安装在Jenkins服务器上(简单的步骤,只需download it,解压缩,将其设置为路径
- Jenkins Groovy Plugin安装在Jenkins中(简单步骤,管理Jenkins>管理插件,可用插件,安装它,然后在Manage Jenkins> Configure System> Groovy下配置它,使其指向安装上面的步骤
然后你可以添加到项目pom以下是build/plugins
部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.directory}/build.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>
我们在做什么?只需使用properties-maven-plugin
及其write-project-properties
目标将项目属性写入目标文件夹(targetuild.properties
)下的新文件中。注意:此文件中的属性已经过插补。
这个新文件对于你的构建和项目是无害的,被任何其他构建步骤忽略,作为mvn clean
调用的一部分被删除,但对Jenkins真的很有帮助。
然后,在相关的Jenkins作业中,您可以添加一个新的Post Steps> Execute系统Groovy脚本(而不是一个Execute Groovy脚本,承载difference)指向一个新的groovy文件,您可以在需要的地方存储或键入控制台以下groovy码:
import hudson.model.*;
import hudson.util.*;
def thr = Thread.currentThread();
def currentBuild = thr?.executable;
def props = new Properties();
new File(currentBuild.workspace.toString()+" argetuild.properties").withInputStream {
stream -> props.load(stream);
}
println "detected from properties: "+props.get("outputFolder");
def newParamAction = new ParametersAction(new StringParameterValue("outputFolder", props.get("outputFolder")));
currentBuild.addAction(newParamAction);
这个脚本在做什么?只需读取属性文件,将outputFolder
属性作为日志打印到控制台(可选择删除),然后将其设置为具有相同名称的新Jenkins作业变量(如果需要,可以更改)。
然后,您可以在进一步的后期构建步骤中使用${outputFolder}
新变量(或Windows命令中的%outputFolder%
),它将正确存在。
例如,您可以通过新的Post Steps> Execute Windows Batch命令对其进行调试,并简单地回显它。这是一个截图:
作为样本Jenkins作业的输出,您将拥有:
detected from properties: C:/AutomationTestReports/sample-project/Execution_(2016-04-24_12-11-13UTC)
[workspace] $ cmd /c call C:dev omcat-7 emphudson6024790907972070905.bat
C:Usersuser-name.jenkinsjobssample-mavenworkspace>echo C:/AutomationTestReports/sample-project/Execution_(2016-04-24_12-11-13UTC)
C:/AutomationTestReports/sample-project/Execution_(2016-04-24_12-11-13UTC)
C:Usersuser-name.jenkinsjobssample-mavenworkspace>exit 0
Finished: SUCCESS
快速而肮脏的解决方案。
添加“执行Shell”步骤,并将属性的值分配给变量:
outputFolderVar=$(awk -F '[<>]' '/outputFolder/{print $3}' pom.xml)
以上是关于如何从詹金斯访问maven属性?的主要内容,如果未能解决你的问题,请参考以下文章
出现 OutOfMemoryError:在詹金斯中执行 maven 构建时 PermGen 空间
如何在詹金斯管道中访问 git commit 消息 INSIDE sh STEP?