运维
创建时间:
Github Actions + 服务器 SSH配置自动化打包流程
Github Actions + 服务器 SSH配置自动化打包流程 - 详细内容介绍
如果我们有个小型的项目,运行在自己的服务器上,一般开发流程是本地开发,推送到github,然后自己手动登录服务器,拉取最新的代码并打包,然后把打出的包上线。
我们希望当我们在github上 push 代码的时候,github 能够自动通知服务器拉取最新的代码并打包,然后把打出的包上线。此时我们不用专门去搭建一套CI/CD系统(比如jenkins、gitlab ci)。
最简单的方式可以怎么做呢?我们可以使用GitHub Actions来实现这个需求,具体方案如下。
步骤 1:配置 GitHub Secrets
在 GitHub 仓库 设置:
- Settings → Secrets and variables → Actions → New repository secret
- 添加:
SSH_HOST = your-server-ip# 服务器IPSSH_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 运行状态
- 进入 GitHub 仓库
- 点击 "Actions" 标签
- 你会看到 Deploy to Server 的运行记录
- 如果部署失败,点击进日志查看具体错误信息
总结
通过以上步骤,你就可以实现 GitHub Actions 自动化部署到服务器了。