From d9a2bc8cdb327071799528f249c7fa4a861013a5 Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Mon, 19 Dec 2022 12:18:36 +0800 Subject: [PATCH] [build] Add retry when make SONiC image to improve success rate. (#12325) Why I did it Makefile needs some dependencies from the Internet. It will fail for network related issue. Retries will fix most of these issues. How I did it Add retries when running commands which maybe related with networking. How to verify it --- .azure-pipelines/template-variables.yml | 6 ++++++ Makefile | 7 ++++--- scripts/run_with_retry | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .azure-pipelines/template-variables.yml create mode 100755 scripts/run_with_retry diff --git a/.azure-pipelines/template-variables.yml b/.azure-pipelines/template-variables.yml new file mode 100644 index 000000000000..027dfee9986a --- /dev/null +++ b/.azure-pipelines/template-variables.yml @@ -0,0 +1,6 @@ +variables: + DEFAULT_CONTAINER_REGISTRY: 'publicmirror.azurecr.io' + COMMON_LIB_BUILD_ENVS: 'bullseye' + SONIC_SLAVE_DOCKER_DRIVER: 'overlay2' + SONIC_BUILD_RETRY_COUNT: 3 + SONIC_BUILD_RETRY_INTERVAL: 600 diff --git a/Makefile b/Makefile index e1864ea991bc..f3217bf03149 100644 --- a/Makefile +++ b/Makefile @@ -15,16 +15,17 @@ PLATFORM_PATH := platform/$(if $(PLATFORM),$(PLATFORM),$(CONFIGURED_PLATFORM)) PLATFORM_CHECKOUT := platform/checkout PLATFORM_CHECKOUT_FILE := $(PLATFORM_CHECKOUT)/$(PLATFORM).ini PLATFORM_CHECKOUT_CMD := $(shell if [ -f $(PLATFORM_CHECKOUT_FILE) ]; then PLATFORM_PATH=$(PLATFORM_PATH) j2 $(PLATFORM_CHECKOUT)/template.j2 $(PLATFORM_CHECKOUT_FILE); fi) +MAKE_WITH_RETRY := ./scripts/run_with_retry $(MAKE) %:: @echo "+++ --- Making $@ --- +++" ifeq ($(NOJESSIE), 0) - EXTRA_DOCKER_TARGETS=$(notdir $@) make -f Makefile.work jessie + $(MAKE_WITH_RETRY) EXTRA_DOCKER_TARGETS=$(notdir $@) -f Makefile.work jessie endif ifeq ($(NOSTRETCH), 0) - EXTRA_DOCKER_TARGETS=$(notdir $@) BLDENV=stretch make -f Makefile.work stretch + $(MAKE_WITH_RETRY) EXTRA_DOCKER_TARGETS=$(notdir $@) BLDENV=stretch -f Makefile.work stretch endif - BLDENV=buster make -f Makefile.work $@ + $(MAKE_WITH_RETRY) BLDENV=buster -f Makefile.work $@ jessie: @echo "+++ Making $@ +++" diff --git a/scripts/run_with_retry b/scripts/run_with_retry new file mode 100755 index 000000000000..9e709bbf1bda --- /dev/null +++ b/scripts/run_with_retry @@ -0,0 +1,17 @@ +#!/bin/bash + +run_with_retry(){ + [ "$SONIC_BUILD_RETRY_COUNT" -gt 0 ] || SONIC_BUILD_RETRY_COUNT=0 + [[ "$*" == "" ]] && { echo "run_with_retry: input command can't be empty." 1>&2;exit 1; } + for ((i=0; i<=$SONIC_BUILD_RETRY_COUNT; i++)) + do + if [[ $i != 0 ]];then + echo "==============================================================================" 1>&2 + echo "Waiting $SONIC_BUILD_RETRY_INTERVAL to run again, $i/$SONIC_BUILD_RETRY_COUNT" 1>&2 + echo "==============================================================================" 1>&2 + sleep $SONIC_BUILD_RETRY_INTERVAL + fi + "$@" && break + done +} +run_with_retry "$@"