Skip to content

Commit 9a343ba

Browse files
authored
Merge pull request #817 from b-ehlers/retry
Docker build: Retry on communication errors
2 parents f12a037 + 59e1b17 commit 9a343ba

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

.github/bin/docker_build

+23-5
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import json
6161
import re
6262
import shlex
6363
import subprocess
64+
import time
6465
import dxf
6566
import requests.exceptions
6667
import dateutil.parser
@@ -132,6 +133,23 @@ def docker_auth(docker, response):
132133
response=response)
133134

134135

136+
def retry(tries, func, *func_args, **func_kwargs):
137+
""" retry requests based function """
138+
while True:
139+
tries -= 1
140+
try:
141+
return func(*func_args, **func_kwargs)
142+
except (requests.exceptions.ConnectionError,
143+
requests.exceptions.Timeout):
144+
if tries <= 0:
145+
raise
146+
except requests.exceptions.HTTPError as err:
147+
if tries <= 0 or err.response.status_code not in \
148+
(429, 500, 502, 503, 504):
149+
raise
150+
time.sleep(3)
151+
152+
135153
def get_time_layers(repository):
136154
"""
137155
get created time and layer info from the docker registry
@@ -148,16 +166,16 @@ def get_time_layers(repository):
148166
docker.registry_auth = docker_login.get(registry, [None, None])
149167
# get config digest
150168
try:
151-
digest = docker.get_digest(tag, platform="linux/amd64")
169+
digest = retry(3, docker.get_digest, tag, platform="linux/amd64")
152170
except dxf.exceptions.DXFUnauthorizedError:
153171
return None
154172
except requests.exceptions.HTTPError as err:
155-
if err.response.status_code not in (401, 403, 404):
156-
raise
157-
return None
173+
if err.response.status_code in (401, 403, 404):
174+
return None
175+
raise
158176

159177
# get config: pull_blob(digest)
160-
data = json.loads(b''.join(docker.pull_blob(digest)))
178+
data = json.loads(b''.join(retry(3, docker.pull_blob, digest)))
161179

162180
return {"created": dateutil.parser.parse(data["created"]),
163181
"layers": data["rootfs"]["diff_ids"]}

0 commit comments

Comments
 (0)