冰朔要求: 工作流名称和输出全部用中文,报错能看懂 修改: - ci-and-deploy.yaml — 增加部署验证步骤(唤醒门/同步服务), 依赖安装覆盖更多目录 - patrol.yaml — 修复旧路径 /opt/zhuyuan-cn → /data/guanghulab/repo - cvm-power-on/off.yaml — 修复旧路径 - selfcheck.yaml — 步骤名已中文(之前就是) 删除(冰朔看不懂的调试工作流): - debug-secrets.yaml, test-secrets.yaml, verify-secrets.yaml - final-secrets-test.yaml, deploy-infra.yaml, deploy-preview.yaml 保留6个工作流: 1. CI检查+自动部署 — 合并到main时自动部署 2. 铸渊自检 — 每天08:00健康检查 3. 铸渊巡逻 — DeepSeek+千问AI巡检 4. 安全关机检测 — 手动触发 5. CVM开机 — 手动触发 6. CVM关机 — 手动触发
110 lines
4.0 KiB
YAML
110 lines
4.0 KiB
YAML
# ════════════════════════════════════════════════════════════════
|
|
# 光湖 · 铸渊自检工作流
|
|
# Trigger: 每天 08:00 CST / 手动触发
|
|
# Runner: zhuyuan-runner-cn (host 模式)
|
|
#
|
|
# 注意: 代码自动同步由 Git Sync 服务负责 (Webhook → git pull)
|
|
# 此工作流仅做健康检查,不再执行 git 操作
|
|
# ════════════════════════════════════════════════════════════════
|
|
|
|
name: 铸渊自检
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 0 * * *' # UTC 00:00 = CST 08:00
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
health-check:
|
|
runs-on: ubuntu
|
|
steps:
|
|
|
|
- name: 系统信息
|
|
run: |
|
|
echo "═══ 铸渊自检 ═══"
|
|
echo "时间: $(date '+%Y-%m-%d %H:%M:%S %Z')"
|
|
echo "主机: $(hostname)"
|
|
echo "系统: $(uname -srm)"
|
|
echo "CPU: $(nproc) 核"
|
|
echo "内存: $(free -h | awk '/Mem:/ {print $2}')"
|
|
echo "磁盘: $(df -h / | awk 'NR==2 {print $4}') 可用"
|
|
|
|
- name: 服务状态
|
|
run: |
|
|
echo "═══ 服务检查 ═══"
|
|
# Gitea/Forgejo
|
|
if systemctl is-active --quiet forgejo 2>/dev/null; then
|
|
echo "✅ Gitea/Forgejo: 运行中"
|
|
elif curl -sf http://127.0.0.1:3001/ > /dev/null 2>&1; then
|
|
echo "✅ Gitea/Forgejo: 运行中 (Docker)"
|
|
else
|
|
echo "❌ Gitea/Forgejo: 未运行"
|
|
fi
|
|
|
|
# Nginx
|
|
if systemctl is-active --quiet nginx 2>/dev/null; then
|
|
echo "✅ Nginx: 运行中"
|
|
else
|
|
echo "❌ Nginx: 未运行"
|
|
fi
|
|
|
|
# Git Sync 同步服务
|
|
if curl -sf http://127.0.0.1:8082/health > /dev/null 2>&1; then
|
|
echo "✅ Git Sync: 运行中"
|
|
else
|
|
echo "⚠️ Git Sync: 未运行 (代码自动同步不可用)"
|
|
fi
|
|
|
|
# Secrets Vault
|
|
if curl -sf http://127.0.0.1:8080/admin/__healthz > /dev/null 2>&1; then
|
|
echo "✅ Secrets Vault: 运行中"
|
|
else
|
|
echo "⚠️ Secrets Vault: 未运行 (可能尚未启动)"
|
|
fi
|
|
|
|
# Wake Gate 唤醒门
|
|
if curl -sf http://127.0.0.1:8081/api/health > /dev/null 2>&1; then
|
|
echo "✅ Wake Gate: 运行中"
|
|
else
|
|
echo "⚠️ Wake Gate: 未运行"
|
|
fi
|
|
|
|
# PM2 进程
|
|
if command -v pm2 &>/dev/null; then
|
|
echo "═══ PM2 进程 ═══"
|
|
pm2 list 2>/dev/null || echo "(pm2 list 执行失败)"
|
|
fi
|
|
|
|
- name: 仓库状态
|
|
run: |
|
|
echo "═══ 仓库检查 ═══"
|
|
REPO_DIR="/data/guanghulab/repo"
|
|
if [[ -d "$REPO_DIR" ]]; then
|
|
cd "$REPO_DIR"
|
|
echo "路径: $REPO_DIR"
|
|
echo "分支: $(git branch --show-current 2>/dev/null || echo '未知')"
|
|
echo "最新: $(git log --oneline -1 2>/dev/null || echo '未知')"
|
|
else
|
|
echo "⚠️ 仓库目录不存在: $REPO_DIR"
|
|
fi
|
|
|
|
- name: 内存预算
|
|
run: |
|
|
echo "═══ 内存预算 ═══"
|
|
total=$(free -m | awk '/Mem:/ {print $2}')
|
|
used=$(free -m | awk '/Mem:/ {print $3}')
|
|
avail=$(free -m | awk '/Mem:/ {print $7}')
|
|
pct=$((used * 100 / total))
|
|
echo "总计: ${total}MB | 已用: ${used}MB (${pct}%) | 可用: ${avail}MB"
|
|
if [[ $pct -gt 85 ]]; then
|
|
echo "⚠️ 内存使用率超过 85%,建议关注"
|
|
fi
|
|
|
|
- name: 自检完成
|
|
run: |
|
|
echo "═════════════════════════"
|
|
echo "铸渊自检完成 ✅"
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S %Z')"
|
|
echo "ICE-GL-ZY001 · TCS-0002∞"
|
|
echo "═════════════════════════"
|