Я создал конвейер, который выполняет «дымовой тест» после развертывания через HTTP-запрос к информационной конечной точке двух моих развернутых приложений. Я сделал это с трехкратной повторной попыткой, потому что один из запросов вышел из строя. но этих трех попыток по-прежнему недостаточно, поэтому конвейер "вылетает".
Вот мой код:
void smoketests() {
retry(3) {
try {
SMOKE_TEST_PORTS.each {
port ->
String url = isReleaseBranch() ?
"https://<url>:${port}/actuator/info" :
"http://<url>:${port}/actuator/info"
def responseJson = readJSON(text:
httpRequest(consoleLogResponseBody: true, timeout: 60, httpMode: 'GET', ignoreSslErrors: true, url: url)
.content)
if (!responseJson.build.version.equals(POM.getVersion())) {
throw new Exception("Not expected version number (${responseJson.build.version})")
}
}
} catch (err) {
println err
sleep(time: 20, unit: 'SECONDS')
throwError('can\'t reach health endpoint(s) or not expected version number')
}
}
if (isReleaseBranch()) {
sendMattermostMsg("released ${PROJECT} with version ${POM.getVersion()} on UAT")
}
}
Итак, я добавил таймаут 60 секунд, но это все равно иногда дает сбой. Но конечные точки доступны через браузер. есть ли моя ошибка в коде конвейера?
Вот логи:
HttpMethod: GET
URL: https://<url>:11761/actuator/info
Sending request to url: https://<url>:11761/actuator/info
Treating class org.apache.http.conn.HttpHostConnectException(Connect to
<url>:11761 [<url>] failed: Connection refused (Connection refused)) as 408 Request Timeout
Response:
class org.apache.http.conn.HttpHostConnectException(Connect to <url>:11761 [<url>] failed: Connection
refused (Connection refused)) as 408 Request Timeout
[Pipeline] echo
java.lang.IllegalStateException: hudson.AbortException: Fail: the returned code 408 is not in the accepted range: [[100‥399]]
[Pipeline] sleep
Sleeping for 20 sec
... etc.