From 3bdd29ca57679d900c59bf604d6ed3fbb4703086 Mon Sep 17 00:00:00 2001 From: dseefeld Date: Mon, 30 Oct 2017 20:28:22 +0000 Subject: Add retry logic for setup of dotnet cli --- init-tools.sh | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'init-tools.sh') diff --git a/init-tools.sh b/init-tools.sh index c1c3ef6cd4..98a3ce30fd 100755 --- a/init-tools.sh +++ b/init-tools.sh @@ -43,6 +43,27 @@ display_error_message() cat "$__init_tools_log" 1>&2 } +# Executes a command and retries if it fails. +execute_with_retry() { + local count=0 + local retries=${retries:-5} + local waitFactor=${waitFactor:-6} + until "$@"; do + local exit=$? + count=$(( $count + 1 )) + if [ $count -lt $retries ]; then + local wait=$(( waitFactor ** (( count - 1 )) )) + echo "Retry $count/$retries exited $exit, retrying in $wait seconds..." + sleep $wait + else + say_err "Retry $count/$retries exited $exit, no more retries left." + return $exit + fi + done + + return 0 +} + if [ ! -e $__DOTNET_PATH ]; then if [ -z "$__DOTNET_PKG" ]; then if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then @@ -97,15 +118,20 @@ if [ ! -e $__DOTNET_PATH ]; then echo "Installing dotnet cli..." __DOTNET_LOCATION="https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.tar.gz" - # curl has HTTPS CA trust-issues less often than wget, so lets try that first. - echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> $__init_tools_log - if command -v curl > /dev/null; then - curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} - else - wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} - fi - cd $__DOTNET_PATH - tar -xf $__DOTNET_PATH/dotnet.tar + + install_dotnet_cli() { + echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> "$__init_tools_log" + rm -rf -- "$__DOTNET_PATH/*" + # curl has HTTPS CA trust-issues less often than wget, so lets try that first. + if command -v curl > /dev/null; then + curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} + else + wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} + fi + cd $__DOTNET_PATH + tar -xf $__DOTNET_PATH/dotnet.tar + } + execute_with_retry install_dotnet_cli >> "$__init_tools_log" 2>&1 cd $__scriptpath fi -- cgit v1.2.3