fix: 修正阿里云镜像推送路径和增强错误处理
Some checks failed
部署后端服务 / 🔄 回滚部署 (push) Has been cancelled
部署后端服务 / 🚀 构建并部署 (push) Has been cancelled

- 使用正确的镜像仓库路径格式
- 增强镜像推送的日志输出
- 改进重试机制和错误提示
- 添加详细的推送状态信息

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
xujiang
2025-07-15 14:01:12 +08:00
parent 7ea3d8142b
commit 169dafc722

View File

@ -48,22 +48,33 @@ jobs:
# 验证配置 # 验证配置
docker info | grep -A 5 "Registry Mirrors" || true docker info | grep -A 5 "Registry Mirrors" || true
- name: 🔑 登录到镜像仓库 - name: 🔑 登录到镜像仓库(使用阿里云访问令牌)
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
env:
DOCKER_CLI_EXPERIMENTAL: enabled
- name: 🔍 验证镜像仓库连接
run: | run: |
echo "🔍 验证镜像仓库连接..." echo "🔑 使用阿里云访问令牌登录..."
docker pull hello-world:latest || true # 创建 Docker 配置文件
docker logout ${{ env.REGISTRY }} || true mkdir -p ~/.docker
echo "🏷️ 重新登录镜像仓库..." cat > ~/.docker/config.json << EOF
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ env.REGISTRY }} --username "${{ secrets.DOCKER_USERNAME }}" --password-stdin {
"auths": {
"${{ env.REGISTRY }}": {
"auth": "$(echo -n '${{ secrets.DOCKER_USERNAME }}:${{ secrets.DOCKER_PASSWORD }}' | base64 -w 0)"
}
}
}
EOF
# 验证登录状态
echo "🔍 验证登录状态..."
if docker pull ${{ env.REGISTRY }}/library/hello-world:latest 2>/dev/null; then
echo "✅ 镜像仓库认证成功"
else
echo "❌ 镜像仓库认证失败,尝试基础认证..."
# 使用基础认证
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ env.REGISTRY }} --username "${{ secrets.DOCKER_USERNAME }}" --password-stdin || {
echo "❌ 所有认证方式都失败"
exit 1
}
fi
- name: 📝 提取元数据 - name: 📝 提取元数据
id: meta id: meta
@ -76,36 +87,74 @@ jobs:
type=sha,prefix={{branch}}- type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}} type=raw,value=latest,enable={{is_default_branch}}
- name: 🏗️ 构建并推送镜像 - name: 🏗️ 构建镜像(使用正确格式)
uses: docker/build-push-action@v5
with:
context: ./backend
file: ./backend/Dockerfile
platforms: linux/amd64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
provenance: false
sbom: false
continue-on-error: true
id: build_push
- name: 🔄 重试构建和推送
if: steps.build_push.outcome == 'failure'
run: | run: |
echo "⚠️ 构建推送失败等待10秒后重试..." echo "🔨 开始构建 Docker 镜像..."
sleep 10 cd ./backend
docker buildx build --push \
--platform linux/amd64 \ # 设置正确的镜像标签格式
--tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \ IMAGE_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}"
--tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ IMAGE_TAG_LATEST="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
--cache-from type=gha \
--cache-to type=gha,mode=max \ echo "🏷️ 镜像标签:"
--provenance=false \ echo " - $IMAGE_TAG"
--sbom=false \ echo " - $IMAGE_TAG_LATEST"
./backend
# 构建镜像
docker build -t $IMAGE_TAG -t $IMAGE_TAG_LATEST .
# 验证镜像
echo "🔍 验证镜像构建..."
docker images | grep photography-backend
echo "✅ 镜像构建完成"
- name: 📤 推送镜像(使用正确路径)
run: |
IMAGE_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}"
IMAGE_TAG_LATEST="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
echo "📤 开始推送镜像..."
echo "📋 目标仓库: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
# 重试机制
max_attempts=3
attempt=1
while [ $attempt -le $max_attempts ]; do
echo "📤 推送尝试 $attempt/$max_attempts..."
echo "🚀 推送命令: docker push $IMAGE_TAG"
if docker push $IMAGE_TAG; then
echo "✅ 版本标签推送成功"
echo "🚀 推送 latest 标签: docker push $IMAGE_TAG_LATEST"
if docker push $IMAGE_TAG_LATEST; then
echo "✅ latest 标签推送成功"
break
else
echo "⚠️ latest 标签推送失败,但版本标签已成功"
break
fi
else
echo "❌ 推送失败,等待重试..."
if [ $attempt -lt $max_attempts ]; then
echo "⏳ 等待15秒后重试..."
sleep 15
fi
fi
attempt=$((attempt + 1))
done
if [ $attempt -gt $max_attempts ]; then
echo "❌ 所有推送尝试都失败"
echo "📋 请检查以下配置:"
echo " - 仓库地址: ${{ env.REGISTRY }}"
echo " - 镜像名称: ${{ env.IMAGE_NAME }}"
echo " - 认证信息: ${{ secrets.DOCKER_USERNAME }}"
exit 1
fi
- name: 📦 同步配置文件 - name: 📦 同步配置文件
run: | run: |