Github 使用工作流自动部署前端项目
新建文件
在项目根目录下新建 .github/workflows/node.js.yml
工作流脚本
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.17.0]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- name: Install pnpm
run: npm install -g pnpm
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- run: pnpm install
- run: pnpm run build
- name: Deploy To Server
uses: easingthemes/ssh-deploy@main
with:
# 本地.ssh文件下的私钥id_rsa,存在secrets的PRIVATE_KEY中
SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
# 源目录
SOURCE: "./.output/"
# 部署目标主机
REMOTE_HOST: ${{ secrets.HOST }}
# 部署目标主机端口
REMOTE_PORT: ${{ secrets.PORT }}
# 登录用户
REMOTE_USER: ${{ secrets.USER }}
# 部署目标目录
TARGET: ${{ secrets.TARGET }}
# 重启 Docker
SCRIPT_AFTER: |
docker restart pixiBloom
脚本解释
1. name: Node.js CI
工作流名称:给这个 GitHub Action 工作流一个名字,称为 “Node.js CI”
2. on 部分
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
触发条件:当代码推送到 main 分支时,或者当有人向 main 分支发起 Pull Request 时,该工作流会自动运行
3. strategy 部分
strategy:
matrix:
node-version: [20.17.0]
策略:使用 matrix 策略可以运行多个不同版本的 Node.js。这里指定了 20.17.0 版本
4. steps 部分
定义了在作业中要执行的步骤,每个步骤代表一个操作
4.1 安装 pnpm
- name: Install pnpm
run: npm install -g pnpm
首先安装 pnpm,这是一个 Node.js 的包管理工具,类似于 npm 和 yarn
4.2 检出代码
- uses: actions/checkout@v3
从仓库中检出代码,这个步骤使用的是官方的 actions/checkout GitHub Action,它负责将你的代码拉取到虚拟机中
4.3 设置 Node.js 版本
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
使用 actions/setup-node GitHub Action,根据 matrix 中的版本信息,设置指定的 Node.js 版本,并启用 pnpm 缓存,以加快依赖安装速度
4.4 安装依赖
- run: pnpm install
通过 pnpm 安装项目所需的依赖
4.5 构建项目
- run: pnpm run build
执行 pnpm run build 命令,通常是构建生产环境的代码(例如打包、编译)
5. 部署到服务器
- name: Deploy To Server
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
SOURCE: "./.output/"
REMOTE_HOST: ${{ secrets.HOST }}
REMOTE_PORT: ${{ secrets.PORT }}
REMOTE_USER: ${{ secrets.USER }}
TARGET: ${{ secrets.TARGET }}
SCRIPT_AFTER: |
docker restart pixiBloom
使用 easingthemes/ssh-deploy Action 将构建后的代码部署到远程服务器上
SSH_PRIVATE_KEY: 使用 GitHub Secrets 中存储的 PRIVATE_KEY 作为 SSH 私钥,以便连接到远程服务器。
SOURCE: 指定要部署的本地目录为 ./.output/。
REMOTE_HOST: 远程主机的地址,通过 Secrets 变量 HOST 传递。
REMOTE_PORT: 远程主机的端口,通过 Secrets 变量 PORT 传递。
REMOTE_USER: 远程主机的登录用户,通过 Secrets 变量 USER 传递。
TARGET: 远程服务器上的目标目录,通过 Secrets 变量 TARGET 传递。
SCRIPT_AFTER: 部署后运行的脚本,这里是重启 Docker 中的 pixiBloom 容器。