From 36cccb3d12edd60c6163b6baa784bf5eb44209e0 Mon Sep 17 00:00:00 2001 From: Qiu Date: Fri, 19 Jun 2026 23:28:13 +0800 Subject: [PATCH] 2222 --- .gitea/workflows/deploy.yml | 49 ++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index b4764e1..1be960c 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,5 +1,5 @@ # ========================================== -# 纯 Bash 命令行部署工作流(不依赖第三方 Action 插件) +# 纯 Bash 命令行部署工作流(适配自定义 SSH 端口) # ========================================== name: Deploy Frontend @@ -13,47 +13,52 @@ jobs: runs-on: ubuntu-latest steps: - # 1. 官方核心插件:仅用于拉取当前仓库的代码到工作区 - name: Checkout code uses: actions/checkout@v4 - # 2. 纯安全机制与自动化传输(完全使用 Linux 内置命令) - - name: Execute Bash Deployment (Debug Mode) + - name: Execute Bash Deployment run: | + # -------------- 1. 声明与解析变量 -------------- SERVER_IP="${{ secrets.SSH_HOST }}" SERVER_USER="${{ secrets.SSH_USER }}" TARGET_DIR="${{ secrets.TARGET_DIR }}" + SSH_PORT="${{ secrets.SSH_PORT }}" + # 兜底本地测试变量(优先读取上面 Secrets,没有则走这里) : ${SERVER_IP:="192.168.31.185"} : ${SERVER_USER:="root"} : ${TARGET_DIR:="/data/apps/ci-cd/frontend"} + : ${SSH_PORT:="2222"} # 👈 默认改为了 2222 端口 - echo "🌐 准备部署至目标服务器: ${SERVER_USER}@${SERVER_IP}:${TARGET_DIR}" - - # 检查私钥是否为空 - if [ -z "${{ secrets.SSH_PRIVATE_KEY }}" ]; then - echo "❌ 错误原因: Gitea Secrets 中的 SSH_PRIVATE_KEY 是空的!" - exit 1 - fi + echo "🌐 准备部署至目标服务器: ${SERVER_USER}@${SERVER_IP}:${TARGET_DIR} (端口: ${SSH_PORT})" + # -------------- 2. 初始化本地 SSH 环境 -------------- mkdir -p ~/.ssh chmod 700 ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 + + # 🚨 关键修改点 1:ssh-keyscan 必须使用 -p 指定非 22 端口 + echo "🔍 正在扫描目标服务器主机指纹..." + ssh-keyscan -p "$SSH_PORT" -H "$SERVER_IP" >> ~/.ssh/known_hosts 2>/dev/null - 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 传输..." + # -------------- 3. 执行 rsync 增量同步 -------------- + echo "🚀 开始传输增量文件..." + + # 🚨 关键修改点 2:rsync 的 -e "ssh" 内部必须使用 -p 指定端口 rsync -avz --delete \ - -e "ssh -i ~/.ssh/id_ed25519 -o ConnectTimeout=10" \ + -e "ssh -i ~/.ssh/id_ed25519 -p $SSH_PORT" \ --exclude=".git/" \ --exclude=".gitea/" \ + --exclude=".github/" \ ./ \ - "${SERVER_USER}@${SERVER_IP}:${TARGET_DIR}" \ No newline at end of file + "${SERVER_USER}@${SERVER_IP}:${TARGET_DIR}" + + # -------------- 4. 状态检查 -------------- + if [ $? -eq 0 ]; then + echo "✨ 部署成功!" + else + echo "❌ 部署失败,请检查密钥权限或局域网连通性。" + exit 1 + fi \ No newline at end of file