Jenkins Pipeline循环意外结束

时间:2016-08-18 19:28:11

标签: jenkins groovy jenkins-pipeline

我正在尝试验证在执行Jenkins管道后,一个tomcat中的所有Web应用程序都在运行。

我正在验证多个网址,所以我想在for循环中执行此操作。 它以收集的第一个网址结束。

这是我的代码

@NonCPS
def verifyServices(list) {
    echo "Services: "+list.size()
    def result = true
    for(int i = 0; i < list.size(); i++){
        if(result) {
            result = testUrl(list[i])
        }
    }
    return result
}

def verify = []
verify.add("http://example.com:8082")
verify.add("http://example.com:8082/rest/version")
verify.add("http://example.com:8082/mobile/version")
verifyServices(verify)

和testUrl函数

def call(urlString) {
    echo "Testing ${urlString}"
    def url = new URL(urlString)
    def HttpURLConnection connection = url.openConnection()
    connection.setRequestMethod("GET")
    connection.setDoInput(true)

    try {
        connection.connect()
        def code = connection.getResponseCode()
        echo "Response code ${code}"
        return code == 200
    } finally {
        connection.disconnect()
    }
}

这是我的日志

Proceeding
[Pipeline] echo
Services: 3
[Pipeline] echo
Testing http://example.com:8082
[Pipeline] echo
Response code 200
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

当我删除testUrl中对verifyServices函数的调用时,它会迭代所有这些函数。

我做错了吗?或者for循环刚刚被打破?

1 个答案:

答案 0 :(得分:1)

不知何故,@NonCPS注释正在弄乱您的方法调用。删除它,你会没事的。另外,我认为您首先不需要它,您的代码似乎没有引入任何可序列化的问题@NonCPS注释会修复...

您可以阅读CPS technical design上的更多内容或how to serializable variables上的教程建议。