2017-05-25 49 views
0

我的問題類似於this one關於如何加載外部groovy腳本,然後在不同的groovy腳本中調用它的方法。到目前爲止,我已經能夠獲得不返回值的方法,但是我無法將返回的值傳入所調用的變量。Jenkins管道外部腳本返回一個空值

例如,下面的管道代碼工作正常,但在運行Jenkins管道時爲$build_user提供了值null。它實際上並沒有回報我期望的結果,我不知道爲什麼。

node { 
    stage('test') { 
     def tools = load "/var/lib/jenkins/workflow-libs/vars/tools.groovy" 
     build_user = tools.get_user() 
     echo "build_user: $build_user" 
    } 
} 

以下是相關tools.groovy的外觀。

def exampleMethod() { 
    // Do stuff 
} 

// Try to get a build username 
def get_user() { 

    try { 
     wrap([$class: 'BuildUser']) { 
      // Set up our variables 
      fallback_user = 'GitHub' 
      github_user = BUILD_USER 
      commit_author = 'Test1' 

      // Try to use Jenkins build user first 
      if (github_user) { 
       echo "using github_user: $github_user" 
       return github_user 
      } 
      // Otherwise try to use commit author 
      else if (commit_author) { 
       echo "using commit_author: $commit_author" 
       return commit_author 
      } 
      // Otherwise username is blank so we use the default fallback 
      else { 
       echo "using fallback: $fallback_user" 
       return fallback_user 
      } 
     } 
    } 
    catch (err) { 
     // Ignore errors 
    } 

    echo "Done." 
} 

return this 

下面是上述代碼的完整Jenkins輸出。

Started by user XXX 
[Pipeline] node 
Running on master in /var/lib/jenkins/workspace/test 
[Pipeline] { 
[Pipeline] stage 
[Pipeline] { (test) 
[Pipeline] load 
[Pipeline] { (/var/lib/jenkins/workflow-libs/vars/tools.groovy) 
[Pipeline] } 
[Pipeline] // load 
[Pipeline] wrap 
[Pipeline] { 
[Pipeline] echo 
using github_user: XXX 
[Pipeline] } 
[Pipeline] // wrap 
[Pipeline] echo 
Done. 
[Pipeline] echo 
build_user: null 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

上述方法,如果我在端部除去return this並不在所有的工作和引發以下錯誤在詹金斯。

顯示java.lang.NullPointerException:無法 空對象 調用方法GET_USER()...

我在做什麼錯?我懷疑我錯過了一些簡單的東西,但我對Groovy並不擅長,所以我不確定它會是什麼。

回答

1

你的功能get_user()什麼也沒有返回。

return(s)裏面wrap([$class: 'BuildUser']) {...}確實從wrap類返回,而不是從你的函數返回。

+0

就是這樣。而不是回到裏面我只是分配給一個變量,並在'wrap'後面返回。 – jmreicha