如何将Jenkins环境变量注入到Maven构建中?

7

我需要获取Jenkins环境变量,如BUILD_NUMBER和BUILD_URL,并将它们注入到我的Maven Java构建中作为变量。

我已将以下内容添加到pom.xml中:

<properties>
    <jenkins.buildUrl>${env.BUILD_URL}</jenkins.buildUrl>
</properties>

在只使用mvn install构建时,我正在尝试通过以下方式获取变量:

private static final String JENKINS_BUILD_URL = System.getProperty("jenkins.buildUrl");

很不幸,结果为空...
各位,我做错了什么?

我通过引入这个Maven目标成功获取了变量-Djenkins.buildUrl=${BUILD_URL}。 - Atanas Kanchev
我如何在不使用-Djenkins.buildUrl=${BUILD_URL}的情况下实例化变量?我有大量的Jenkins作业,我希望将其保留在源代码中而不是Jenkins配置中。 - Atanas Kanchev
2个回答

6

如果您想将此值读入单元测试中,您需要配置surefire插件的环境变量:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
       <environmentVariables>
           <jenkins.buildUrl>${env.BUILD_URL}</jenkins.buildUrl>
       </environmentVariables>
   </configuration>
</plugin>

根据这份文档说明:http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables,可以设置环境变量。请注意,在其他插件中也可以进行相同的操作,比如Maven Tomcat插件。

谢谢,它可以工作,但我必须在每个任务的构建阶段中包含新的Maven目标-Djenkins.buildUrl = $ {BUILD_URL}。是否有其他实例化变量的方法? - Atanas Kanchev
1
Surefire 的配置应该足够了。 - Aurélien Thieriot

5
这是我在应用程序中实现的方法:
在pom.xml文件中添加一个属性。
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      
    <jenkins.buildNumber>${env.BUILD_NUMBER}</jenkins.buildNumber>      
</properties>

在.properties文件中创建一个新属性。
jenkins.build.number = ${jenkins.buildNumber}

通过添加以下内容在Maven中启用过滤:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

然后使用以下代码从Java中读取它

properties.load(MyClass.class.getResourceAsStream("/project.properties"));
version = properties.getProperty("jenkins.build.number");

将maven目标更改为clean package -Denv.BUILD_NUMBER=${BUILD_NUMBER}。
我将在我们应用程序的“关于”页面中展示它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接