This repository has been archived on 2026-09-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
UserBaseFront/.gitea/workflows/deploy.yml
T

78 lines
3.3 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.
name: deploy-userbase-front
# 前端部署(方案 B:不打包镜像,直接部署静态文件 + 软链接版本控制)
# 触发:push 到 main / 手动 Run workflow
# 核心:vite build --mode prod -> dist/prod
# -> 拷贝到 /data/www/userbase/releases/<version>/
# -> 原子切换 /data/www/userbase/front 软链接指向新版本
# -> 保留最近 5 个版本,更早自动清理(秒级回滚)
# 不再构建/推送 nginx 镜像;Caddy 由 caddy-switch 工作流一次性改为 file_server。
# 依赖:160 宿主的 docker daemon(runner 已挂 docker.sock)。无需 NEXUS secret。
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
# docker:24 自带 docker CLI,复用宿主 docker daemon(act_runner v0.6.1 已挂载 docker.sock)。
# 切勿再声明 volumes: docker.sock(会报 Duplicate mount point)。
container:
image: docker:24
steps:
- name: Install git (alpine)
run: apk add --no-cache git
# 内网 Gitea 无法访问 github.com 拉取 actions/checkout,改为直接 clone 本仓库
- name: Checkout (manual, internal Gitea)
run: |
git clone --depth 1 --branch main http://192.168.10.160:3000/${GITHUB_REPOSITORY}.git /tmp/src
cp -a /tmp/src/. .
rm -rf /tmp/src
# 构建 + 部署:在 node:20 容器里完成(源码经 docker cp 传入,并挂载宿主 /data/www/userbase)
- name: Build & Deploy (symlink versioning)
run: |
set -e
# 版本号:short sha + 时间戳(可改为 git tag 优先,见下)
VERSION="$(echo ${GITHUB_SHA} | cut -c1-7)-$(date +%Y%m%d-%H%M)"
echo "Deploying version: $VERSION"
docker rm -f frontbuild 2>/dev/null || true
docker run -d --name frontbuild \
-e VERSION="$VERSION" \
-v /data/www/userbase:/data/www/userbase \
-w /build node:20 sleep 3600
# 源码拷入构建容器(绕过 act 工作区非宿主路径的坑,与 service 的 mavenbuild 一致)
docker cp "${PWD}/." frontbuild:/build/
docker exec frontbuild sh -c '
set -e
cd /build
# 去掉 Windows 专用 sass 二进制路径(Linux 容器内该路径无效,否则 build 报错)
sed -i "/SASS_BINARY_PATH/d" .npmrc
npm ci
npm run build:prod
'
# 部署:拷贝 dist/prod -> releases/<version>,原子切换软链接
docker exec frontbuild sh -c '
set -e
cd /build
mkdir -p /data/www/userbase/releases/$VERSION
cp -r /build/dist/prod/. /data/www/userbase/releases/$VERSION/
# 原子切换:ln -sfn 不跟随已有链接,直接替换指向
ln -sfn /data/www/userbase/releases/$VERSION /data/www/userbase/front
echo "current symlink ->"; ls -la /data/www/userbase/front
# 清理旧版本,保留最近 5 个
cd /data/www/userbase/releases
ls -1t | tail -n +6 | while read d; do echo "rm old: $d"; rm -rf "$d"; done
echo "remaining versions:"; ls -1t
'
docker rm -f frontbuild
echo "DEPLOY OK: $VERSION"