From 38f64f770d03875f7e01c5ce13cc60ec03b1b01d Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Fri, 26 Sep 2025 09:48:00 -0700 Subject: [PATCH] in1 --- .gitea/workflows/docker.yml | 146 ++++++++++++++++++++++++++++++------ 1 file changed, 121 insertions(+), 25 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 1384cb0..8fee8e7 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -404,7 +404,25 @@ jobs: docker push ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-user-web:${{ env.VERSION }} fi - + - name: SSH连接预检查 + if: env.BUILD_TARGET == 'admin' || env.BUILD_TARGET == 'user' || env.BUILD_TARGET == 'both' + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + key: ${{ secrets.KEY }} + port: ${{ secrets.PORT }} + timeout: 60s + command_timeout: 30s + debug: true + script: | + echo "=== SSH连接测试 ===" + echo "连接时间: $(date)" + echo "服务器主机名: $(hostname)" + echo "当前用户: $(whoami)" + echo "系统信息: $(uname -a)" + echo "Docker版本: $(docker --version 2>/dev/null || echo 'Docker未安装')" + echo "✅ SSH连接成功" - name: 部署管理面板到服务器 if: env.BUILD_TARGET == 'admin' || env.BUILD_TARGET == 'both' @@ -416,6 +434,16 @@ jobs: port: ${{ secrets.PORT }} timeout: 300s command_timeout: 600s + debug: true + use_insecure_cipher: false + cipher: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com + fingerprint: "" + proxy_host: "" + proxy_port: "" + proxy_username: "" + proxy_password: "" + proxy_timeout: 30s + proxy_use_insecure_cipher: false script: | echo "=== SSH变量调试信息 ===" echo "DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }}" @@ -480,24 +508,53 @@ jobs: # 安全停止和移除容器 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 + CONTAINER_NAME="ppanel-admin-web" - 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 "容器移除成功" + # 检查容器是否存在 + if docker ps -aq -f name=$CONTAINER_NAME | grep -q .; then + echo "发现现有容器,开始清理..." + + # 检查容器是否正在运行 + if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then + echo "停止运行中的容器..." + docker stop $CONTAINER_NAME --time=15 || true + sleep 5 + fi + + # 检查容器是否正在被移除 + echo "检查容器移除状态..." + for i in {1..15}; do + # 尝试获取容器状态 + CONTAINER_STATUS=$(docker inspect $CONTAINER_NAME --format='{{.State.Status}}' 2>/dev/null || echo "not_found") + + if [ "$CONTAINER_STATUS" = "not_found" ]; then + echo "✅ 容器已不存在" break + elif [ "$CONTAINER_STATUS" = "removing" ]; then + echo "⏳ 容器正在移除中,等待完成... $i/15" + sleep 3 else - echo "等待容器停止... $i/10" + echo "尝试移除容器... $i/15" + if docker rm -f $CONTAINER_NAME 2>/dev/null; then + echo "✅ 容器移除成功" + break + else + echo "⚠️ 容器移除失败,重试..." + sleep 2 + fi + fi + + # 最后一次尝试强制清理 + if [ $i -eq 15 ]; then + echo "🔧 执行强制清理..." + docker kill $CONTAINER_NAME 2>/dev/null || true + sleep 2 + docker rm -f $CONTAINER_NAME 2>/dev/null || true sleep 2 fi done + else + echo "✅ 未发现现有容器" fi echo "启动新容器..." @@ -535,6 +592,16 @@ jobs: port: ${{ secrets.PORT }} timeout: 300s command_timeout: 600s + debug: true + use_insecure_cipher: false + cipher: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com + fingerprint: "" + proxy_host: "" + proxy_port: "" + proxy_username: "" + proxy_password: "" + proxy_timeout: 30s + proxy_use_insecure_cipher: false script: | echo "=== SSH变量调试信息 ===" echo "DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }}" @@ -599,24 +666,53 @@ jobs: # 安全停止和移除容器 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 + CONTAINER_NAME="ppanel-user-web" - 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 "容器移除成功" + # 检查容器是否存在 + if docker ps -aq -f name=$CONTAINER_NAME | grep -q .; then + echo "发现现有容器,开始清理..." + + # 检查容器是否正在运行 + if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then + echo "停止运行中的容器..." + docker stop $CONTAINER_NAME --time=15 || true + sleep 5 + fi + + # 检查容器是否正在被移除 + echo "检查容器移除状态..." + for i in {1..15}; do + # 尝试获取容器状态 + CONTAINER_STATUS=$(docker inspect $CONTAINER_NAME --format='{{.State.Status}}' 2>/dev/null || echo "not_found") + + if [ "$CONTAINER_STATUS" = "not_found" ]; then + echo "✅ 容器已不存在" break + elif [ "$CONTAINER_STATUS" = "removing" ]; then + echo "⏳ 容器正在移除中,等待完成... $i/15" + sleep 3 else - echo "等待容器停止... $i/10" + echo "尝试移除容器... $i/15" + if docker rm -f $CONTAINER_NAME 2>/dev/null; then + echo "✅ 容器移除成功" + break + else + echo "⚠️ 容器移除失败,重试..." + sleep 2 + fi + fi + + # 最后一次尝试强制清理 + if [ $i -eq 15 ]; then + echo "🔧 执行强制清理..." + docker kill $CONTAINER_NAME 2>/dev/null || true + sleep 2 + docker rm -f $CONTAINER_NAME 2>/dev/null || true sleep 2 fi done + else + echo "✅ 未发现现有容器" fi echo "启动新容器..."