Maven无法读取Jenkins环境变量

时间:2017-06-09 18:25:08

标签: maven jenkins jenkins-pipeline

我使用JenkinsFile管道脚本在Jenkins中构建了一个Spring Boot项目。

这个Spring项目使用Spring Boot父pom文件。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
</parent>

我将所有依赖项(包括上述父项)托管在自定义存储库中(碰巧通过Nexus代理)。该存储库的定义如下所示

<repositories>
    <repository>
        <id>nexus</id>
        <url>${env.REPO_URL}</url>
    </repository>
</repositories>

在我的本地开发机器中,我已将REPO_URL环境变量设置为我的存储库的URL。在本地,当我mvn install这个工作正常。 Maven将存储库URL解析为我在我的环境中定义的内容,并且不会遇到任何问题。

当我尝试使用JenkinsFile管道脚本来定义REPO_URL的环境变量时,我的问题出现了。在Jenkins脚本定义中,它看起来像:

stringParam(name: 'REPO_URL', value: 'www.my.repo')

我只需使用:

构建JenkinsFile
sh "mvn clean package"

Maven将生成以下错误:

[FATAL] Non-resolvable parent POM for org.my.project:my-project:1.0.0: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.4.1.RELEASE from/to nexus (${env.REPO_URL}): Cannot access ${env.REPO_URL} with type default using the available connector factories: BasicRepositoryConnectorFactory and 'parent.relativePath' points at wrong local POM @ line 12, column 10

从错误消息的外观来看,似乎Maven无法访问该环境变量。但是,在我的JenkinsFile中,如果我执行echo,则变量将填充正确的值。很明显这个变量是填充的,但由于某些原因,Maven没有正确解析它。

使用Jenkins为Maven提供环境变量是否存在错误?

1 个答案:

答案 0 :(得分:1)

参数不同。你可以在Jenkins文件中引用那些params.REPO_URL,但不能在你触发的脚本中引用它们。设置这样的环境变量:

pipeline {
  agent { label 'docker' }
  environment {
    REPO_URL = 'www.my.repo'
  }
  stages {
    stage('build') {
      steps {
        sh 'env | grep REPO_URL' // logs "REPO_URL=www.my.repo" for me
        sh 'mvn clean package'
      }
    }
  }
}