Update main.yml

This commit is contained in:
镀铬酸钾
2026-03-11 17:56:15 +08:00
committed by GitHub
parent 4a72670379
commit ae5fe32ba7

View File

@@ -1,6 +1,4 @@
name: Auto Deploy NeoBot (Full Env Secrets) name: Auto Deploy NeoBot (FRP + SSH 密码登录)
# 触发条件推送到main分支 或 手动触发
on: on:
push: push:
branches: [ main ] branches: [ main ]
@@ -8,50 +6,60 @@ on:
jobs: jobs:
deploy-to-server: deploy-to-server:
# 关联你的仓库环境ENV
environment: ENV environment: ENV
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 10 # 防超时堵塞
steps: steps:
# ========== 1. 检查环境密钥配置 ==========
- name: 检查环境密钥配置 - name: 检查环境密钥配置
run: | run: |
echo "✅ 已关联环境: ${{ github.environment }}" echo "✅ 已关联环境: ${{ github.environment }}"
echo "✅ API_URL 密钥是否存在: ${{ secrets.API_URL != '' }}" # 仅检查密码登录必需的3个密钥
echo "✅ API_TOKEN 密钥是否存在: ${{ secrets.NEOBOT_DEPLOY_TOKEN != '' }}" echo "✅ PROD_SERVER_HOST 密钥是否存在: ${{ secrets.PROD_SERVER_HOST != '' }}"
echo "✅ PROD_SERVER_USER 密钥是否存在: ${{ secrets.PROD_SERVER_USER != '' }}"
echo "✅ PROD_SERVER_PASS 密钥是否存在: ${{ secrets.PROD_SERVER_PASS != '' }}"
- name: 调用部署API # ========== 2. 安装 sshpass密码登录必需 ==========
env: - name: 安装 sshpass 工具
# 从环境密钥中读取API地址和Token均为密文
API_URL: ${{ secrets.API_URL }}
API_TOKEN: ${{ secrets.NEOBOT_DEPLOY_TOKEN }}
run: | run: |
# 安装jq用于解析JSON sudo apt-get update && sudo apt-get install -y sshpass
sudo apt-get update && sudo apt-get install -y jq
# ========== 3. 密码登录服务器 + 执行部署 ==========
# 打印关键信息(脱敏,仅验证是否读取到值) - name: 执行FRP穿透部署用户名+密码登录)
echo "📌 调用的API地址脱敏: $(echo $API_URL | sed 's/http:\/\///; s/\/deploy//')" id: ssh_deploy_step
continue-on-error: true
# 发送POST请求到部署API所有配置均来自密钥 run: |
RESPONSE=$(curl -s -X POST \ # 核心sshpass 实现密码登录,-p 8000 是FRP转发端口
$API_URL \ sshpass -p "${{ secrets.PROD_SERVER_PASS }}" \
-H "Content-Type: application/json" \ ssh -o StrictHostKeyChecking=no -p 8000 ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }} << 'EOF'
-H "X-API-Token: $API_TOKEN" \ set -e
-d '{"script_name":"deploy.sh"}') # 适配NeoBot项目更新依赖+重启systemd服务
cd /home/k/NeoBot
# 打印完整响应(便于调试) pip install -r requirements.txt --upgrade --timeout 300 --only-binary=:all:
echo "📝 API响应详情" sudo systemctl daemon-reload
echo $RESPONSE | jq . sudo systemctl restart neobot
# 验证服务状态
# 解析status字段判断部署结果 if ! sudo systemctl is-active --quiet neobot; then
STATUS=$(echo $RESPONSE | jq -r '.status') echo "❌ NeoBot服务启动失败最后10行日志"
if [ "$STATUS" = "success" ]; then sudo journalctl -u neobot -n 10 --no-pager
echo "✅ 部署成功!" exit 1
fi
echo "✅ NeoBot服务重启成功"
EOF
# ========== 4. 判定最终部署结果 ==========
- name: 判定最终部署结果
run: |
if [ ${{ steps.ssh_deploy_step.outcome }} = 'success' ]; then
echo "✅ 最终部署成功已更新依赖并重启NeoBot systemd服务"
exit 0 exit 0
else else
echo "❌ 部署失败!错误信息:$(echo $RESPONSE | jq -r '.message')" echo "❌ 最终部署失败!核心SSH部署步骤执行出错"
exit 1 exit 1
fi fi
# ========== 5. 部署失败通知(可选) ==========
- name: 部署失败通知(可选) - name: 部署失败通知(可选)
if: failure() if: failure()
run: | run: |
echo "⚠️ 部署失败,可在此添加通知逻辑" echo "⚠️ 部署失败,可在此添加钉钉/企业微信通知逻辑"