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 {
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
'''
}