Files
gongxue-base/.gitea/workflows/deploy.yml
wangziqi f0321b5bdd
Some checks failed
CI / check (pull_request) Failing after 3m9s
ci(deploy): 部署工作流改为本地 runner 直跑版(免 SSH/Secrets)
- 移除 SSH/rsync 步骤与 SSH 相关 Secrets 依赖,runs-on: self-hosted 本机直跑
- 步骤:git pull → npm ci → build → migration:run → pm2 startOrReload --update-env → 健康检查
- 新增可选输入 seed_roles:首次部署/新增权限码时强制播种 RBAC,跑完自动去掉
- .env 无需配置到 Gitea,仅放服务器部署目录
- 注释说明 runner 在 docker 容器时的挂载与宿主 pm2 要求
2026-08-09 21:41:48 +08:00

84 lines
3.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PM2 本地 runner 手动部署工作流
# 手动触发 → 服务器本地 git pull → 构建 → 依赖安装 → 数据库迁移 → PM2 重载
#
# 适用场景Gitea runner 与生产服务器同机(本机直跑,不需要 SSH/Secrets
#
# 前置准备:
# 1. Gitea Actions 已开启,且已注册 self-hosted runnerruns-on 标签与下面一致)
# 2. 服务器已 clone 仓库到部署目录(默认 /opt/gongxue可用仓库 Variable REMOTE_DIR 覆盖)
# 3. 服务器已安装 Node 22 + PM2npm i -g pm2MySQL 已运行
# 4. runner 运行账户对部署目录有写权限、可执行 npm/pm2
#
# 关于 .env不需要配置在 Gitea 界面。.env 只放在服务器部署目录下,
# git pull 不会覆盖它PM2/Nest 启动时直接读取服务器上的 .env。
#
# 关于“在 docker 里构建/迁移”:
# - 如果 runner 以“宿主机进程”方式运行(推荐,最省事):本 workflow 的
# npm ci / build / migration 直接在宿主机执行pm2 直接操作宿主 pm2。
# - 如果 runner 跑在 docker 容器里:需要把部署目录挂载进容器
# (如 -v /opt/gongxue:/opt/gongxue构建/迁移在容器内完成;
# PM2 重载则必须打到宿主机(挂载 docker.sock 后 docker exec 到宿主,
# 或在宿主机单独跑 pm2 服务端)——容器里的 pm2 管理不了宿主进程。
name: PM2 本地部署
on:
workflow_dispatch:
inputs:
seed_roles:
description: '强制播种 RBAC 权限码(首次部署或新增权限码时勾选,跑完会自动去掉)'
required: false
default: false
type: boolean
concurrency:
group: deploy-local
cancel-in-progress: false
jobs:
deploy:
runs-on: self-hosted # 改为你注册 runner 时使用的 label如 ubuntu-latest
steps:
- name: 拉取最新代码
run: |
cd ${{ vars.REMOTE_DIR || '/opt/gongxue' }}
git fetch origin
git checkout main
git pull origin main
- name: 安装依赖 & 构建
run: |
cd ${{ vars.REMOTE_DIR || '/opt/gongxue' }}
npm ci
npm run build -w @gongxue/server
npm run build -w @gongxue/admin
- name: 执行数据库迁移
run: |
cd ${{ vars.REMOTE_DIR || '/opt/gongxue' }}
npm run migration:run -w @gongxue/server
- name: PM2 重载
run: |
cd ${{ vars.REMOTE_DIR || '/opt/gongxue' }}
if [ "${{ github.event.inputs.seed_roles }}" = "true" ]; then
echo '>>> 强制播种 RBAC 权限码(本次进程带 SEED_ROLES=true'
SEED_ROLES=true pm2 startOrReload ecosystem.config.cjs --only gongxue-backend --update-env
pm2 restart gongxue-backend --update-env # 去掉 SEED_ROLES 正常重启
else
pm2 startOrReload ecosystem.config.cjs --update-env
fi
pm2 save
pm2 status
- name: 健康检查
run: |
cd ${{ vars.REMOTE_DIR || '/opt/gongxue' }}
sleep 3
code="$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:3000/api/dashboard/stats || true)"
echo "后端 HTTP 状态: ${code}401=正常,接口需登录)"
if [ "${code}" != "401" ] && [ "${code}" != "200" ]; then
echo "健康检查失败:后端未按预期响应" >&2
exit 1
fi