簡體   English   中英

Jenkins Pipeline外部腳本返回空值

[英]Jenkins Pipeline external script returning a null value

我的問題與類似,關於如何加載外部groovy腳本,然后在另一個groovy腳本中從中調用方法。 到目前為止,我已經能夠獲得不返回值的方法,但是我無法將返回的值轉換為被調用的變量。

例如,以下管道代碼有效,但是當我運行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 ,並在Jenkins中引發以下錯誤,則上述方法根本不起作用。

java.lang.NullPointerException:無法在空對象上調用方法get_user()。

我究竟做錯了什么? 我懷疑我缺少一些簡單的東西,但是我對Groovy並不滿意,所以我不確定會是什么。

您必須以return this結束您的tools.groovy
查看此問題的答案如何加載groovy文件並執行它

您的函數get_user()返回任何內容。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM