Compare commits

3 Commits

Author SHA1 Message Date
shanshanzhong147 bd4091524e in1
CI / build (20.15.1) (push) Failing after 24m12s
2025-09-26 18:50:38 -07:00
shanshanzhong147 5b7f778551 in1
CI / build (20.15.1) (push) Successful in 30m33s
2025-09-26 17:33:59 -07:00
shanshanzhong147 38f64f770d in1
CI / build (20.15.1) (push) Failing after 23m2s
2025-09-26 09:48:00 -07:00
+141 -58
View File
@@ -404,16 +404,34 @@ 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: ${{ env.SSH_HOST }}
username: ${{ env.SSH_USER }}
password: ${{ env.SSH_PASSWORD }}
port: ${{ env.SSH_PORT }}
timeout: 300s
command_timeout: 600s
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'
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
host: ${{ env.SSH_HOST }}
username: ${{ env.SSH_USER }}
password: ${{ env.SSH_PASSWORD }}
port: ${{ env.SSH_PORT }}
timeout: 300s
command_timeout: 600s
script: |
@@ -480,24 +498,53 @@ jobs:
# 安全停止和移除容器
echo "检查现有容器状态..."
if docker ps -q -f name=ppanel-admin-web | grep -q .; then
CONTAINER_NAME="ppanel-admin-web"
# 检查容器是否存在
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 ppanel-admin-web --time=10 || true
sleep 3
docker stop $CONTAINER_NAME --time=15 || true
sleep 5
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 "容器移除成功"
# 检查容器是否正在被移除
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/15"
if docker rm -f $CONTAINER_NAME 2>/dev/null; then
echo "✅ 容器移除成功"
break
else
echo "等待容器停止... $i/10"
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 "启动新容器..."
@@ -529,12 +576,13 @@ jobs:
if: 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 }}
host: ${{ env.SSH_HOST }}
username: ${{ env.SSH_USER }}
password: ${{ env.SSH_PASSWORD }}
port: ${{ env.SSH_PORT }}
timeout: 300s
command_timeout: 600s
debug: true
script: |
echo "=== SSH变量调试信息 ==="
echo "DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }}"
@@ -599,24 +647,53 @@ jobs:
# 安全停止和移除容器
echo "检查现有容器状态..."
if docker ps -q -f name=ppanel-user-web | grep -q .; then
CONTAINER_NAME="ppanel-user-web"
# 检查容器是否存在
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 ppanel-user-web --time=10 || true
sleep 3
docker stop $CONTAINER_NAME --time=15 || true
sleep 5
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 "容器移除成功"
# 检查容器是否正在被移除
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/15"
if docker rm -f $CONTAINER_NAME 2>/dev/null; then
echo "✅ 容器移除成功"
break
else
echo "等待容器停止... $i/10"
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 "启动新容器..."
@@ -644,39 +721,45 @@ jobs:
docker logs ppanel-user-web || true
exit 1
- name: 发送成功通知到Telegram
# 步骤5: TG通知 (成功)
- name: 📱 发送成功通知到Telegram
if: success()
run: |
MESSAGE="✅ 部署成功!
uses: chapvic/telegram-notify@master
with:
bot_token: ${{ env.TELEGRAM_BOT_TOKEN }}
chat_id: ${{ env.TELEGRAM_CHAT_ID }}
message: |
✅ **部署成功!**
📦 项目: ${{ github.repository }}
🌿 分支: ${{ github.ref_name }}
🔖 版本: ${{ env.VERSION }}
🎯 构建目标: ${{ env.BUILD_TARGET }}
🔗 API地址: ${{ env.NEXT_PUBLIC_API_URL }}
📦 **项目**: ${{ github.repository }}
🌿 **分支**: ${{ github.ref_name }}
🔖 **版本**: ${{ env.VERSION }}
🎯 **构建目标**: ${{ env.BUILD_TARGET }}
🔗 **API地址**: ${{ env.NEXT_PUBLIC_API_URL }}
📝 **提交**: ${{ github.sha }}
👤 **提交者**: ${{ github.actor }}
🕐 **时间**: ${{ github.event.head_commit.timestamp }}
🕐 时间: $(date '+%Y-%m-%d %H:%M:%S')"
🚀 **服务已成功部署到生产环境**
parse_mode: Markdown
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
-d chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
-d text="$MESSAGE" \
-d parse_mode="HTML"
- name: 发送失败通知到Telegram
# 步骤5: TG通知 (失败)
- name: 📱 发送失败通知到Telegram
if: failure()
run: |
MESSAGE="❌ 部署失败!
uses: chapvic/telegram-notify@master
with:
bot_token: ${{ env.TELEGRAM_BOT_TOKEN }}
chat_id: ${{ env.TELEGRAM_CHAT_ID }}
message: |
❌ **部署失败!**
📦 项目: ${{ github.repository }}
🌿 分支: ${{ github.ref_name }}
🔖 版本: ${{ env.VERSION }}
🎯 构建目标: ${{ env.BUILD_TARGET }}
📦 **项目**: ${{ github.repository }}
🌿 **分支**: ${{ github.ref_name }}
🔖 **版本**: ${{ env.VERSION }}
🎯 **构建目标**: ${{ env.BUILD_TARGET }}
📝 **提交**: ${{ github.sha }}
👤 **提交者**: ${{ github.actor }}
🕐 **时间**: ${{ github.event.head_commit.timestamp }}
🕐 时间: $(date '+%Y-%m-%d %H:%M:%S')
请检查构建日志获取详细信息。"
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
-d chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
-d text="$MESSAGE" \
-d parse_mode="HTML"
⚠️ **请检查构建日志获取详细信息**
parse_mode: Markdown