2017-06-09 237 views
0

我有一個使用JenkinsFile管道腳本在Jenkins中構建的Spring Boot項目。Maven無法讀取Jenkins環境變量

這個Spring項目使用Spring Boot父級文件。

<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的環境變量時,出現了我的問題。在詹金斯的腳本定義,它看起來像:

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

params是不同的。你可以在你的Jenkinsfile中引用它們作爲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' 
     } 
    } 
    } 
}