From c5cebb07e90a2d1e3e3ad7fee0b370bb694d94e2 Mon Sep 17 00:00:00 2001 From: Rory Hunter Date: Wed, 14 Oct 2020 14:00:49 +0100 Subject: [PATCH] Retry wget tasks in Dockerfile (#63615) Following #52519, our Docker build pulls down curl sources in an Alpine Linux container using wget. However that version of wget doesn't support any retry flags. Since network issues can cause build failures, wrap the wget calls in the same retry construct used for yum commands elsewhere. Closes #63600. --- distribution/docker/src/docker/Dockerfile | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/distribution/docker/src/docker/Dockerfile b/distribution/docker/src/docker/Dockerfile index c0c98651ca7f..aa43648d2b09 100644 --- a/distribution/docker/src/docker/Dockerfile +++ b/distribution/docker/src/docker/Dockerfile @@ -61,10 +61,19 @@ RUN apk add gnupg gcc make musl-dev openssl-dev openssl-libs-static file RUN mkdir /work WORKDIR /work -# Fetch curl sources and files for validation -RUN wget "https://daniel.haxx.se/mykey.asc" -O "curl-gpg.pub" && \\ - wget "\${TARBALL_URL}.asc" -O "\${TARBALL_PATH}.asc" && \\ - wget "\${TARBALL_URL}" -O "\${TARBALL_PATH}" +# Fetch curl sources and files for validation. Note that alpine's `wget` doesn't have retry options. +RUN function retry_wget() { \\ + local URL="\$1" ; \\ + local DEST="\$2" ; \\ + for iter in {1..10}; do \\ + wget "\$URL" -O "\$DEST" && \\ + exit_code=0 && break || exit_code=\$? && echo "wget error fetching \$URL: retry \$iter in 10s" && sleep 10; \\ + done; \\ + return \$exit_code ; \\ + } ; \\ + retry_wget "https://daniel.haxx.se/mykey.asc" "curl-gpg.pub" && \\ + retry_wget "\${TARBALL_URL}.asc" "\${TARBALL_PATH}.asc" && \\ + retry_wget "\${TARBALL_URL}" "\${TARBALL_PATH}" # Validate source RUN gpg --import --always-trust "curl-gpg.pub" && \\ @@ -216,7 +225,8 @@ RUN for iter in {1..10}; do \\ ${package_manager} update --setopt=tsflags=nodocs -y && \\ ${package_manager} install --setopt=tsflags=nodocs -y \\ nc shadow-utils zip unzip findutils procps-ng && \\ - ${package_manager} clean all && exit_code=0 && break || exit_code=\$? && echo "${package_manager} error: retry \$iter in 10s" && \\ + ${package_manager} clean all && \\ + exit_code=0 && break || exit_code=\$? && echo "${package_manager} error: retry \$iter in 10s" && \\ sleep 10; \\ done; \\ (exit \$exit_code)