# ========================================== # 纯 Bash 命令行部署工作流(不依赖第三方 Action 插件) # ========================================== name: Deploy Frontend on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: # 1. 官方核心插件:仅用于拉取当前仓库的代码到工作区 - name: Checkout code uses: actions/checkout@v4 # 2. 纯安全机制与自动化传输(完全使用 Linux 内置命令) - name: Execute Bash Deployment (Debug Mode) run: | SERVER_IP="${{ secrets.SSH_HOST }}" SERVER_USER="${{ secrets.SSH_USER }}" TARGET_DIR="${{ secrets.TARGET_DIR }}" : ${SERVER_IP:="192.168.31.185"} : ${SERVER_USER:="root"} : ${TARGET_DIR:="/data/apps/ci-cd/frontend"} echo "🌐 准备部署至目标服务器: ${SERVER_USER}@${SERVER_IP}:${TARGET_DIR}" # 检查私钥是否为空 if [ -z "${{ secrets.SSH_PRIVATE_KEY }}" ]; then echo "❌ 错误原因: Gitea Secrets 中的 SSH_PRIVATE_KEY 是空的!" exit 1 fi mkdir -p ~/.ssh chmod 700 ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 echo "🔍 正在尝试扫描服务器指纹..." # 如果你的 SSH 不是 22 端口,请在这里的 -p 后面修改 ssh-keyscan -H "$SERVER_IP" >> ~/.ssh/known_hosts if [ $? -ne 0 ]; then echo "❌ 错误原因: 无法通过网络连接到服务器 $SERVER_IP 的 SSH 端口,请检查网络或网络穿透!" exit 1 fi echo "🚀 开始执行 rsync 传输..." rsync -avz --delete \ -e "ssh -i ~/.ssh/id_ed25519 -o ConnectTimeout=10" \ --exclude=".git/" \ --exclude=".gitea/" \ ./ \ "${SERVER_USER}@${SERVER_IP}:${TARGET_DIR}"