fix(cicd): push 重试每次重新 login,修复 Harbor auth session 过期

重试多次后报 'no basic auth credentials'(docker login session 过期)。
改成 push_retry 函数:每次 push 前重新 docker login,组合成原子重试单元。
重试次数提到 10 次。
This commit is contained in:
xiangning 2026-07-17 14:30:57 +08:00
parent efa9f1d489
commit 2489b33270

26
Jenkinsfile vendored
View File

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