diff --git a/Jenkinsfile b/Jenkinsfile index a065dd7..a771df4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -34,18 +34,20 @@ pipeline { steps { withCredentials([usernamePassword(credentialsId: "harbor-credentials", usernameVariable: "HUSER", passwordVariable: "HPASS")]) { sh ''' - echo $HPASS | docker login $HARBOR -u $HUSER --password-stdin - # 跨地域 push 大 blob 易断流,重试利用断点续传(已传层会跳过) - for i in 1 2 3 4 5 6 7 8; do - docker push $IMAGE:$TAG && break - echo "push $IMAGE:$TAG 第 $i 次中断,3秒后重试(断点续传)..." - sleep 3 - done - for i in 1 2 3 4 5 6 7 8; do - docker push $IMAGE:latest && break - echo "push $IMAGE:latest 第 $i 次中断,3秒后重试..." - sleep 3 - done + # 跨地域 push 大 blob 易断流 + Harbor auth session 会过期 + # 每次 push 前重新 login,组合成原子重试单元(断点续传,已传层跳过) + push_retry() { + local img=$1 + for i in 1 2 3 4 5 6 7 8 9 10; do + echo $HPASS | docker login $HARBOR -u $HUSER --password-stdin >/dev/null 2>&1 + docker push "$img" && return 0 + echo "push $img 第 $i 次中断,5秒后重试(重新登录+断点续传)..." + sleep 5 + done + return 1 + } + push_retry $IMAGE:$TAG + push_retry $IMAGE:latest docker logout $HARBOR ''' }