diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..a3d6d37 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,101 @@ +name: 部署到生产环境 + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + 1: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: 安装依赖工具 + run: sudo apt-get install -y sshpass expect + + - name: 创建部署脚本 + run: | + cat > deploy.sh << 'EOF' + #!/usr/bin/expect -f + set timeout 60 + + # 连接服务器 + spawn ssh -o StrictHostKeyChecking=no -p 42422 $env(SERVER_USER)@$env(SERVER_ADDRESS) + + # 处理普通密码提示 + expect { + "Password:" { + send "$env(SERVER_PASSWORD)\r" + } + } + + # 等待登录成功 + expect "$ " + + # 关闭服务 + send "sudo systemctl stop neobot.service\r" + expect { + "Password:" { + send "$env(SERVER_PASSWORD)\r" + exp_continue + } + "$ " {} + } + + # 拉取最新代码 + send "cd /home/luoxiaolei/neobot/NeoBot && git pull origin main\r" + expect { + "error:" { + send_user "代码拉取失败!\n" + exit 1 + } + "$ " {} + } + + # 重启服务 + send "sudo systemctl start neobot.service\r" + expect { + "Password:" { + send "$env(SERVER_PASSWORD)\r" + exp_continue + } + "$ " {} + } + + # 检查服务状态 + send "sudo systemctl status neobot.service\r" + expect { + "active (running)" { + send_user "服务重启成功!\n" + } + "failed" { + send_user "服务启动失败!\n" + exit 1 + } + } + + # 退出 + send "exit\r" + + expect eof + EOF + chmod +x deploy.sh + + - name: 执行部署 + run: | + export SERVER_USER="${{ secrets.SERVER_USER }}" + export SERVER_ADDRESS="${{ secrets.SERVER_ADDRESS }}" + export SERVER_PASSWORD="${{ secrets.SERVER_PASSWORD }}" + ./deploy.sh + continue-on-error: true + + - name: 清理脚本 + run: rm deploy.sh + + - name: 检查部署状态 + if: failure() + run: | + echo "部署失败!请检查服务器日志。" + exit 1