From 0f58c4ef7cb9d47cacde313b82769bc63823b709 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Fri, 26 Sep 2025 06:47:11 -0700 Subject: [PATCH] in1 --- .gitea/workflows/docker.yml | 126 +++++++++++++++++++++++++++++++++--- 1 file changed, 118 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 0b40fc8..17ddc44 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -369,6 +369,8 @@ jobs: username: ${{ secrets.USERNAME }} key: ${{ secrets.KEY }} port: ${{ secrets.PORT }} + timeout: 300s + command_timeout: 600s script: | echo "=== SSH变量调试信息 ===" echo "DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }}" @@ -377,16 +379,69 @@ jobs: echo "BRANCH: ${{ env.BRANCH }}" echo "=== 部署管理面板 ===" - docker pull ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-admin-web:${{ env.VERSION }} - docker stop ppanel-admin-web || true - docker rm ppanel-admin-web || true + + # 拉取镜像(带重试) + echo "拉取Docker镜像..." + for i in {1..3}; do + if docker pull ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-admin-web:${{ env.VERSION }}; then + echo "镜像拉取成功" + break + else + echo "镜像拉取失败,重试 $i/3" + sleep 5 + if [ $i -eq 3 ]; then + echo "❌ 镜像拉取失败,部署终止" + exit 1 + fi + fi + done + + # 安全停止和移除容器 + echo "检查现有容器状态..." + if docker ps -q -f name=ppanel-admin-web | grep -q .; then + echo "停止运行中的容器..." + docker stop ppanel-admin-web --time=10 || true + sleep 3 + fi + + if docker ps -aq -f name=ppanel-admin-web | grep -q .; then + echo "移除现有容器..." + # 等待容器完全停止 + for i in {1..10}; do + if docker rm ppanel-admin-web 2>/dev/null; then + echo "容器移除成功" + break + else + echo "等待容器停止... $i/10" + sleep 2 + fi + done + fi + + echo "启动新容器..." docker run -d \ --name ppanel-admin-web \ --restart unless-stopped \ -p 3001:3000 \ -e NEXT_PUBLIC_API_URL=${{ env.NEXT_PUBLIC_API_URL }} \ ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-admin-web:${{ env.VERSION }} - echo "✅ 管理面板部署成功" + + # 验证容器启动 + echo "验证容器启动状态..." + for i in {1..10}; do + if docker ps -q -f name=ppanel-admin-web | grep -q .; then + echo "✅ 管理面板部署成功" + docker ps -f name=ppanel-admin-web --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + exit 0 + else + echo "等待容器启动... $i/10" + sleep 3 + fi + done + + echo "❌ 管理面板部署失败 - 容器未能正常启动" + docker logs ppanel-admin-web || true + exit 1 - name: 部署用户面板到服务器 if: env.BUILD_TARGET == 'user' || env.BUILD_TARGET == 'both' @@ -396,6 +451,8 @@ jobs: username: ${{ secrets.USERNAME }} key: ${{ secrets.KEY }} port: ${{ secrets.PORT }} + timeout: 300s + command_timeout: 600s script: | echo "=== SSH变量调试信息 ===" echo "DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }}" @@ -404,16 +461,69 @@ jobs: echo "BRANCH: ${{ env.BRANCH }}" echo "=== 部署用户面板 ===" - docker pull ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-user-web:${{ env.VERSION }} - docker stop ppanel-user-web || true - docker rm ppanel-user-web || true + + # 拉取镜像(带重试) + echo "拉取Docker镜像..." + for i in {1..3}; do + if docker pull ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-user-web:${{ env.VERSION }}; then + echo "镜像拉取成功" + break + else + echo "镜像拉取失败,重试 $i/3" + sleep 5 + if [ $i -eq 3 ]; then + echo "❌ 镜像拉取失败,部署终止" + exit 1 + fi + fi + done + + # 安全停止和移除容器 + echo "检查现有容器状态..." + if docker ps -q -f name=ppanel-user-web | grep -q .; then + echo "停止运行中的容器..." + docker stop ppanel-user-web --time=10 || true + sleep 3 + fi + + if docker ps -aq -f name=ppanel-user-web | grep -q .; then + echo "移除现有容器..." + # 等待容器完全停止 + for i in {1..10}; do + if docker rm ppanel-user-web 2>/dev/null; then + echo "容器移除成功" + break + else + echo "等待容器停止... $i/10" + sleep 2 + fi + done + fi + + echo "启动新容器..." docker run -d \ --name ppanel-user-web \ --restart unless-stopped \ -p 3002:3000 \ -e NEXT_PUBLIC_API_URL=${{ env.NEXT_PUBLIC_API_URL }} \ ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-user-web:${{ env.VERSION }} - echo "✅ 用户面板部署成功" + + # 验证容器启动 + echo "验证容器启动状态..." + for i in {1..10}; do + if docker ps -q -f name=ppanel-user-web | grep -q .; then + echo "✅ 用户面板部署成功" + docker ps -f name=ppanel-user-web --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + exit 0 + else + echo "等待容器启动... $i/10" + sleep 3 + fi + done + + echo "❌ 用户面板部署失败 - 容器未能正常启动" + docker logs ppanel-user-web || true + exit 1 - name: 发送成功通知到Telegram if: success()