我的問題類似於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並不擅長,所以我不確定它會是什麼。
就是這樣。而不是回到裏面我只是分配給一個變量,並在'wrap'後面返回。 – jmreicha