134 lines
4.1 KiB
YAML
134 lines
4.1 KiB
YAML
|
|
# ════════════════════════════════════════════════════════════════
|
|||
|
|
# 光湖 · 自动部署到预览环境
|
|||
|
|
# Trigger: push to main
|
|||
|
|
# 部署到测试+预览环境,正式环境需冰朔在Gitea点Merge
|
|||
|
|
# ════════════════════════════════════════════════════════════════
|
|||
|
|
|
|||
|
|
name: 自动部署预览
|
|||
|
|
|
|||
|
|
on:
|
|||
|
|
push:
|
|||
|
|
branches: [main]
|
|||
|
|
paths:
|
|||
|
|
- 'server/**'
|
|||
|
|
- 'frontend/**'
|
|||
|
|
- 'scripts/**'
|
|||
|
|
- '.gitea/workflows/**'
|
|||
|
|
workflow_dispatch:
|
|||
|
|
|
|||
|
|
jobs:
|
|||
|
|
# ── 第一阶段:测试 ──────────────────────────────────
|
|||
|
|
test:
|
|||
|
|
runs-on: ubuntu
|
|||
|
|
steps:
|
|||
|
|
- name: 拉取最新代码
|
|||
|
|
run: |
|
|||
|
|
cd /data/guanghulab 2>/dev/null || exit 0
|
|||
|
|
git fetch origin
|
|||
|
|
git reset --hard origin/main
|
|||
|
|
|
|||
|
|
- name: 安装依赖
|
|||
|
|
run: |
|
|||
|
|
cd /data/guanghulab/server/secrets-vault 2>/dev/null || exit 0
|
|||
|
|
npm install --production 2>/dev/null || true
|
|||
|
|
|
|||
|
|
- name: 健康检查
|
|||
|
|
run: |
|
|||
|
|
echo "═══ 服务健康检查 ═══"
|
|||
|
|
FAILED=""
|
|||
|
|
|
|||
|
|
# Nginx
|
|||
|
|
if systemctl is-active --quiet nginx; then
|
|||
|
|
echo "✅ Nginx"
|
|||
|
|
else
|
|||
|
|
echo "❌ Nginx 宕机"
|
|||
|
|
FAILED="$FAILED nginx"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Gitea
|
|||
|
|
if curl -sf http://127.0.0.1:3000/ > /dev/null 2>&1; then
|
|||
|
|
echo "✅ Gitea"
|
|||
|
|
else
|
|||
|
|
echo "❌ Gitea 宕机"
|
|||
|
|
FAILED="$FAILED gitea"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Vault
|
|||
|
|
if curl -sf http://127.0.0.1:8080/admin/__healthz > /dev/null 2>&1; then
|
|||
|
|
echo "✅ Vault"
|
|||
|
|
else
|
|||
|
|
echo "⚠️ Vault 未运行"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Runner
|
|||
|
|
if systemctl is-active --quiet gitea-runner; then
|
|||
|
|
echo "✅ Runner"
|
|||
|
|
else
|
|||
|
|
echo "⚠️ Runner 未运行"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [[ -n "$FAILED" ]]; then
|
|||
|
|
echo "❌ 关键服务宕机: $FAILED"
|
|||
|
|
echo "⚠️ 跳过部署,等待修复"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "═══ 测试通过 ✅ ═══"
|
|||
|
|
|
|||
|
|
# ── 第二阶段:预览部署 ──────────────────────────────
|
|||
|
|
preview:
|
|||
|
|
needs: test
|
|||
|
|
runs-on: ubuntu
|
|||
|
|
steps:
|
|||
|
|
- name: 同步代码到预览目录
|
|||
|
|
run: |
|
|||
|
|
REPO="/data/guanghulab"
|
|||
|
|
PREVIEW="/data/guanghulab-preview"
|
|||
|
|
|
|||
|
|
if [[ ! -d "$REPO" ]]; then
|
|||
|
|
echo "仓库目录不存在,跳过"
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 创建预览目录
|
|||
|
|
mkdir -p "$PREVIEW"
|
|||
|
|
|
|||
|
|
# 同步代码(排除.git和node_modules)
|
|||
|
|
rsync -a --delete \
|
|||
|
|
--exclude='.git' \
|
|||
|
|
--exclude='node_modules' \
|
|||
|
|
--exclude='.runtime' \
|
|||
|
|
"$REPO/" "$PREVIEW/"
|
|||
|
|
|
|||
|
|
echo "✅ 预览环境已同步"
|
|||
|
|
|
|||
|
|
- name: 重启预览服务
|
|||
|
|
run: |
|
|||
|
|
PREVIEW="/data/guanghulab-preview"
|
|||
|
|
|
|||
|
|
if [[ ! -d "$PREVIEW/server/secrets-vault" ]]; then
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
cd "$PREVIEW/server/secrets-vault"
|
|||
|
|
|
|||
|
|
# 安装依赖
|
|||
|
|
npm install --production 2>/dev/null || true
|
|||
|
|
|
|||
|
|
# 如果vault在跑,重启它
|
|||
|
|
if pm2 describe guanghulab-vault &>/dev/null; then
|
|||
|
|
pm2 restart guanghulab-vault
|
|||
|
|
echo "✅ Vault 已重启(使用最新代码)"
|
|||
|
|
else
|
|||
|
|
echo "ℹ️ Vault 未运行,不自动启动"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
- name: 部署完成通知
|
|||
|
|
run: |
|
|||
|
|
echo "═════════════════════════"
|
|||
|
|
echo "✅ 预览环境已更新"
|
|||
|
|
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|||
|
|
echo "冰朔可在浏览器查看预览效果"
|
|||
|
|
echo "正式部署需在Gitea创建PR并Merge"
|
|||
|
|
echo "═════════════════════════"
|