name: 部署到生产环境 on: push: branches: [ main ] pull_request: branches: [ main ] workflow_dispatch: inputs: reason: description: '手动触发部署的原因' required: false default: '手动部署' jobs: deploy: runs-on: ubuntu-latest environment: SSH-KEY steps: - uses: actions/checkout@v4 - name: 安装依赖工具 run: sudo apt-get install -y sshpass expect - name: 执行部署 run: | sshpass -p "${{ secrets.SERVER_PASSWORD }}" ssh -o StrictHostKeyChecking=no -p 42422 ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_ADDRESS }} ' set -ex echo "=== 部署调试信息开始 ===" echo "测试sudo权限..." echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S whoami echo "停止服务..." echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S systemctl stop neobot.service echo "修复文件权限..." echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S chown -R ${{ secrets.SERVER_USER }}:${{ secrets.SERVER_USER }} /home/luoxiaolei/neobot/NeoBot cd /home/luoxiaolei/neobot/NeoBot echo "配置Git安全目录..." git config --global --add safe.directory /home/luoxiaolei/neobot/NeoBot echo "检查Git配置..." git config --global --list | grep -i "safe.directory" echo "检查Git远程仓库..." git remote -v echo "检查SSH配置..." echo "当前用户: $(whoami)" echo "家目录: $HOME" echo "检查SSH密钥..." ls -la ~/.ssh/ 2>/dev/null || echo "没有SSH目录" echo "检查SSH代理..." ssh-add -l 2>/dev/null || echo "SSH代理没有密钥" echo "测试GitHub SSH连接..." ssh -T git@github.com 2>&1 || echo "SSH连接测试失败" echo "拉取最新代码..." # 设置Git超时时间,并禁用主机密钥检查 GIT_SSH_COMMAND="ssh -o ConnectTimeout=30 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null" export GIT_SSH_COMMAND echo "环境变量 GIT_SSH_COMMAND: $GIT_SSH_COMMAND" echo "尝试拉取代码(详细模式)..." GIT_TRACE=1 GIT_SSH_COMMAND="ssh -o ConnectTimeout=30 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null" git pull origin main 2>&1 echo "启动服务..." echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S systemctl start neobot.service echo "检查服务状态..." echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S systemctl status neobot.service --no-pager echo "部署完成!" echo "=== 部署调试信息结束 ===" ' continue-on-error: true - name: 检查部署状态 if: failure() run: | echo "部署失败!请检查服务器日志。" exit 1