Почему у меня истекло время ожидания запроса в конвейере Jenkins? - PullRequest
1 голос
/ 09 июля 2020

Я создал конвейер, который выполняет «дымовой тест» после развертывания через 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.

1 Ответ

0 голосов
/ 28 июля 2020

Вы находитесь за корпоративным прокси? Я потратил целую вечность, пытаясь найти правильный синтаксис для аутентификации прокси.

Если так, у вас может сработать что-то вроде этого:

def response = httpRequest url: "http://postman-echo.com/get?test=123", httpProxy: "http://proxy.yourcompany.com:8080", customHeaders: [[name: 'Proxy-Authorization', value: 'Basic xxxxxxxxxxxxxxxxx', maskValue: true]]

Чтобы получить значение «xxxxxxxxxxxxxxxx», введите учетные данные прокси в браузере в следующем формате: javascript: btoa ("имя пользователя: пароль")

...