2016-07-06 2 views
0

У меня есть следующий метод в файле Jenkins, который используется для извлечения данных с данного URL-адреса (отправка json на него и чтение вывода). Назвав его в Дженкинс вызывает сборку повиснуть с * Исходя ..»текстGroovy в Jenkinsfile зависает при отправке по URL-адресу

@NonCPS              
def callService(server, method, params = '') {         
    final HttpURLConnection connection = "http://$server:8080/router/".toURL().openConnection() 
    connection.setRequestMethod("POST");           
    connection.setRequestProperty('Accept', 'application/json;charset=utf-8') 
    connection.setRequestProperty('Content-Type', 'application/json;charset=utf-8') 
    connection.setDoOutput(true)             
    connection.outputStream.withWriter { Writer writer ->      
     writer << """{"jsonrpc": "2.0", "method": "$method", "params": {$params}}""" 
    }                   
    String text = connection.inputStream.withReader { Reader reader -> reader.text } 
    return text                                            
}                    

и вызов этого метода:.

servers = ["example1"] 
for (int i = 0; i < servers.size(); i++) {         
    server = servers[i]              
    assert callService(server, 'VersionService:getVersionDetails').matches('.*build:[1-9][0-9]*.*') 
} 

ли выше код правильно заводной один, или я делать что-то неправильно, что приводит код заморозить

Когда я делаю то же самое, используя локон, он работает?:

curl -v -H 'Accept: application/json;charset=utf-8' -H 'Content-Type: application/json;charset=utf-8' -d '{"jsonrpc": "2.0", "method":"VersionService:getVersionDetails", "params":{}}' http://example1:8080/router/ 
+0

ли он в конечном итоге тайм-аут? –

+0

Нет, он висит там вечно. Когда я делаю завиток, он работает правильно. –

+0

@tim_yates, возможно, reader.text ждет конца строки? Ответ не содержит окончательной строки. –

ответ

0

Проблема была не в хорошем чтении ответа HTTP, а со сломанным , он висит в сборке, если assert сбой (сообщено уже https://issues.jenkins-ci.org/browse/JENKINS-34488).

Таким образом, решение сейчас, чтобы написать свой собственный assert, например .:

def asrt(value) {           
    if (!value) {           
     throw new IllegalStateException("failed assertion") 
    }              
}