Jenkins:Maven 会忽略环境变量 MAVEN_OPTS 和 MAVEN_ARGS

问题描述 投票:0回答:1

在 Jenkins 上,Maven 忽略我在同一管道中设置的环境变量 MAVEN_OPTS 和 MAVEN_ARGS。这是我使用的代码:

pipeline {
    agent {    
        docker {            
            image 'iubar-maven-alpine'
            label 'docker'
            args '-v ${HOME}/.m2:/home/jenkins/.m2:rw,z'
        } 
    } 
    environment {
        MAVEN_ARGS = '--show-version --batch-mode'
        MAVEN_OPTS = '-Djava.awt.headless=true'     
    }   
    stages {    
        stage ('Build') {
            steps {         
                sh 'mvn clean compile'
            }
        }
...     

所以为了解决我需要写的问题:

...
        stage ('Build') {
            steps {         
                sh 'mvn $MAVEN_ARGS $MAVEN_OPTS clean compile'
            }
        }
...

造成这种行为的原因是什么?还有更好的解决办法吗?

jenkins jenkins-pipeline
1个回答
0
投票

造成这种行为的原因是什么?

Maven 仅从版本 3.9.0 开始支持

MAVEN_ARGS
环境变量。顺便说一句,它还允许指定目标,而不仅仅是标志。

当您运行像

sh 'mvn $MAVEN_ARGS $MAVEN_OPTS clean compile

 这样的命令时它对您有用的原因是因为您在 
mvn
 之后放置了一个环境变量 
- 所以您的 shell 将它们作为参数插入到命令中。如果您将环境变量放在
mvn
调用之前,则预期结果将与您在 Jenkinsfile 的
environment
块中定义它们时的结果相同。

还有更好的解决方案吗?

只需更新您的 Maven 版本即可。您最初的方法是规范的方法。我用 Maven 3.8.8 和 3.9.6 确认了这种行为。

另外,请记住,Maven 不仅可以从您使用的环境变量中获取配置,还可以从

settings.xml
以及位于
.mvn
目录中的配置文件获取配置。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.