S
sharpmind.tech
运维
创建时间:

Github Actions + 服务器 SSH配置自动化打包流程

Github Actions + 服务器 SSH配置自动化打包流程 - 详细内容介绍

如果我们有个小型的项目,运行在自己的服务器上,一般开发流程是本地开发,推送到github,然后自己手动登录服务器,拉取最新的代码并打包,然后把打出的包上线。

我们希望当我们在github上 push 代码的时候,github 能够自动通知服务器拉取最新的代码并打包,然后把打出的包上线。此时我们不用专门去搭建一套CI/CD系统(比如jenkins、gitlab ci)。

最简单的方式可以怎么做呢?我们可以使用GitHub Actions来实现这个需求,具体方案如下。

步骤 1:配置 GitHub Secrets

在 GitHub 仓库 设置:

  1. Settings → Secrets and variables → Actions → New repository secret
  2. 添加:
    • SSH_HOST = your-server-ip # 服务器IP
    • SSH_USER = your-username # 服务器用户名
    • SSH_KEY = 你的 SSH 私钥(用 cat ~/.ssh/id_rsa 复制粘贴) # 你的开发机SSH私钥

在 github 的actions 里面 有 两个tab: secrets 和 variables

  • Secrets(机密信息) 👉 存放 敏感数据(如 SSH Key)
  • Variables(变量) 👉 存放 普通变量(如路径、环境变量等)

:::tip SSH_KEY 是你的开发机SSH私钥,而不是服务器的SSH私钥。还有是私钥不是公钥。 :::

如果你不会生成SSH私钥,可以参考这篇文章

步骤 2:创建 GitHub Actions 工作流

在仓库根目录创建 .github/workflows/deploy.yml 文件:

name: Deploy to Server

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Deploy via SSH
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            # 进入项目目录
            cd /var/www/your-project-name 

            # 拉取最新代码
            git pull origin main

            # 安装依赖
            pnpm install

            # 执行构建
            pnpm run build

            # 获取目标目录和备份目录
            TARGET_DIR="${{ vars.TARGET_DIR }}"
            BACKUP_DIR="${{ vars.BACKUP_DIR }}"
            SOURCE_DIR="${{ vars.SOURCE_DIR }}"
            # 备份旧目录
            if [ -d "$TARGET_DIR" ]; then
                echo "检测到 $TARGET_DIR 存在,备份到 $BACKUP_DIR"
                mv "$TARGET_DIR" "$BACKUP_DIR"
            fi

            # 复制新构建的 build 目录
            cp -r "$SOURCE_DIR" "$TARGET_DIR"

            echo "部署完成 🎉"

步骤 3(可选):添加环境变量

上面代码里面,我们用到了 3 个环境变量:

  • PROJECT_DIR = /var/www/your-project-name # 你的项目目录
  • DEPLOY_DIR = /var/www/public/your-project-name # 部署到服务器的目录
  • SOURCE_DIR = /var/www/your-project-name/dist # 构建产物目录

如果你有 不敏感的环境变量,可以添加到 Variables(变量):

进入 Settings → Secrets and variables → Actions → Variables

点击 New repository variable

添加如下内容(可选):

  • PROJECT_DIR = /var/www/your-project-name # 你的项目目录
  • DEPLOY_DIR = /var/www/public/your-project-name # 部署到服务器的目录
  • SOURCE_DIR = /var/www/your-project-name/dist # 构建产物目录

:::tip PROJECT_DIR 是你的项目目录,DEPLOY_DIR 是你的部署目录。SOURCE_DIR 是你的构建产物目录。

这些都是针对服务器的目录。 不是你的本地目录。 :::

步骤 4:查看 GitHub Actions 运行状态

  1. 进入 GitHub 仓库
  2. 点击 "Actions" 标签
  3. 你会看到 Deploy to Server 的运行记录
  4. 如果部署失败,点击进日志查看具体错误信息

总结

通过以上步骤,你就可以实现 GitHub Actions 自动化部署到服务器了。