travis-ci: retry if Git for Windows CI returns HTTP error 502 or 503

The Git for Windows CI web app sometimes returns HTTP errors of "502 bad gateway" or "503 service unavailable" [1]. We also need to check the HTTP content because the GfW web app seems to pass through (error) results from other Azure calls with HTTP code 200. Wait a little and retry the request if this happens. [1] https://docs.microsoft.com/en-in/azure/app-service-web/app-service-web-troubleshoot-http-502-http-503 Signed-off-by: Lars Schneider <larsxschneider@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Lars Schneider committed May 3, 2017 at 23:50 UTC 016d66f512bbbd7d766f6244d989b4549d5b0d5b
1 file changed +21 -2
ci/run-windows-build.sh
+21 -2
@@ -14,14 +14,33 @@ COMMIT=$2
14
15 gfwci () {
16 local CURL_ERROR_CODE HTTP_CODE
17 - exec 3>&1
17 + CONTENT_FILE=$(mktemp -t "git-windows-ci-XXXXXX")
18 + while test -z $HTTP_CODE
19 + do
20 HTTP_CODE=$(curl \
21 -H "Authentication: Bearer $GFW_CI_TOKEN" \
22 --silent --retry 5 --write-out '%{HTTP_CODE}' \
21 - --output >(sed "$(printf '1s/^\xef\xbb\xbf//')" >cat >&3) \
23 + --output >(sed "$(printf '1s/^\xef\xbb\xbf//')" >$CONTENT_FILE) \
24 "https://git-for-windows-ci.azurewebsites.net/api/TestNow?$1" \
25 )
26 CURL_ERROR_CODE=$?
27 + # The GfW CI web app sometimes returns HTTP errors of
28 + # "502 bad gateway" or "503 service unavailable".
29 + # We also need to check the HTTP content because the GfW web
30 + # app seems to pass through (error) results from other Azure
31 + # calls with HTTP code 200.
32 + # Wait a little and retry if we detect this error. More info:
33 + # https://docs.microsoft.com/en-in/azure/app-service-web/app-service-web-troubleshoot-http-502-http-503
34 + if test $HTTP_CODE -eq 502 ||
35 + test $HTTP_CODE -eq 503 ||
36 + grep "502 - Web server received an invalid response" $CONTENT_FILE >/dev/null
37 + then
38 + sleep 10
39 + HTTP_CODE=
40 + fi
41 + done
42 + cat $CONTENT_FILE
43 + rm $CONTENT_FILE
44 if test $CURL_ERROR_CODE -ne 0
45 then
46 return $CURL_ERROR_CODE