---
belongs_to:
  - "[[⚒️ 铸渊·协作指令｜GitHub ↔ Notion 桥接协议]]"
---
# 🔧 铸渊排查指令｜CD自动部署全链路诊断（霜砚签发·2026-03-10）

<aside>
🚨

**P0 · 铸渊读到就做 · 不等人**

来源：霜砚（Notion执行体）→ 铸渊（GitHub执行体）

签发时间：2026-03-10 19:40

工单编号：YM-CD-DEBUG-20260310-001

**妈妈反馈：铸渊的自动部署一直没有成功。需要你做一次全链路排查，把结果写回本页底部。**

</aside>

---

## 🎯 排查目标

**确认 CD 自动部署管线（push to main → [guanghulab.com](http://guanghulab.com) 自动更新）是否跑通。如果没跑通，定位卡在哪一步。**

---

## 📋 排查清单（逐项执行·逐项回报）

### 第一步：确认工作流文件是否在 main 分支上

```bash
git ls-tree main .github/workflows/deploy-to-server.yml
```

- 如果输出有内容 → ✅ 文件存在
- 如果输出为空 → ❌ 文件不在 main 上，说明 PR 没合并或者被删了

### 第二步：检查 GitHub Actions 运行历史

打开仓库 → **Actions** 选项卡 → 查看：

1. `deploy-to-server` 工作流是否出现在左侧列表中？
2. 最近一次运行是什么时候？状态是 ✅ 还是 ❌？
3. 如果从来没运行过 → 说明从来没有触发过（可能是路径过滤把所有 push 都排除了）
4. 如果运行过但失败 → 打开失败的 run，截取错误日志

### 第三步：检查工作流触发条件

读取 `.github/workflows/deploy-to-server.yml` 的 `on.push` 配置：

```yaml
on:
  push:
    branches: [main]
    paths-ignore:
      - ...
```

确认：

- 触发分支是否是 `main`？
- `paths-ignore` 是否过滤掉了太多路径？（比如是否把所有模块目录都排除了？）
- 最近一次 push 到 main 的文件是否全部命中了 paths-ignore？

### 第四步：检查部署目标目录

⚠️ **已知问题**：上次盘点发现 `deploy-to-server.yml` 同步的是 `docs/` 目录，不是 `status-board/` 或正确的站点根目录。

确认：

- rsync 的 `path` 参数实际指向哪个目录？
- 服务器上 Nginx 的 `root` 指向 `/var/www/guanghulab/` 的哪个子目录？
- 两者是否一致？

### 第五步：检查 GitHub Secrets 有效性

在 Actions 的某次运行日志中确认：

- `DEPLOY_HOST` 是否能连通？（rsync 是否报 SSH 连接失败？）
- `DEPLOY_KEY` 是否有效？（是否报 Permission denied？）
- `DEPLOY_PATH` 是否正确？（服务器上这个路径是否存在？）

### 第六步：手动触发一次测试

如果工作流文件存在且配置正确：

```bash
# 方法一：在仓库 Actions 页面点 "Run workflow" 手动触发（如果支持 workflow_dispatch）
# 方法二：push 一个小改动触发
echo "# CD test $(date)" >> CD-TEST.md
git add CD-TEST.md
git commit -m "test: CD pipeline trigger test · YM-CD-DEBUG-20260310-001"
git push origin main
```

然后观察 Actions 是否触发，每个 Job 是否通过。

---

## 📝 铸渊回报格式

**排查完成后，在本页下方追加以下内容：**

```
━━━ 铸渊排查报告 · YM-CD-DEBUG-20260310-001 ━━━
排查时间：[日期时间]
commit SHA：[当前 main HEAD]

① 工作流文件在 main 上：✅ / ❌
② Actions 运行历史：从未运行 / 最近一次 [日期] [状态]
③ 触发条件配置：[是否正确 + 具体配置]
④ paths-ignore 范围：[列出所有排除路径]
⑤ 部署目标目录：rsync path = [?] / Nginx root = [?] / 是否一致 [?]
⑥ Secrets 状态：连接成功 / 连接失败 [具体错误]
⑦ 手动触发测试结果：
   - validate job：✅ / ❌ [错误信息]
   - deploy job：✅ / ❌ [错误信息]
   - notify job：✅ / ❌ [错误信息]
⑧ 服务器上文件是否更新：✅ / ❌
⑨ guanghulab.com 是否显示最新内容：✅ / ❌

【结论】：CD管线 [已跑通 / 卡在第X步]
【原因】：[一句话说明]
【建议修复方案】：[具体操作]

✅ YM-CD-DEBUG-20260310-001 排查完成 · [日期时间]
```

---

---

## 🚨 二次更新（霜砚签发 · 2026-03-10 22:50）

<aside>
🚨

**妈妈已确认：四个 GitHub Secrets 全部配置完成。现在的问题是 `sync-persona-studio.yml` 反复报错，开发者已经把模块上传了，但铸渊这边部署一直失败。立刻排查并修复。**

</aside>

### 已确认的 Secrets 配置

| Secret | 值 | 状态 |
| --- | --- | --- |
| `DEPLOY_HOST` | `8.155.62.235`（阿里云 ECS 公网IP） | ✅ 已填 |
| `DEPLOY_USER` | `root` | ✅ 已填 |
| `DEPLOY_KEY` | SSH 私钥（PEM） | ✅ 已配置 |
| `DEPLOY_PATH` | `/var/www/guanghulab/status-board` | ✅ 已填 |

### ❗ 新发现问题：`sync-persona-studio.yml` 反复失败

截至 2026-03-10 22:50，Actions 页面显示 1,071 次工作流运行。**失败的全部是同一个 workflow：`sync-persona-studio.yml`**，包括：

- `#85` — 合并 PR #47（fix-api-input-is）后触发失败
- `#84` — 合并 PR #49（fix-model-intera）后触发失败
- `#83` `#82` — 合并 PR #50（fix-api-response）后触发失败
- `#81` — 合并远程更新并添加钉钉Phase1模块后失败
- `#80` — 合并 PR #51（debug-cd-deploy）后失败
- 更早的多次运行也失败

**成功的 workflow 是别的**（铸渊·问题自动回复、冰朔人物体·自动配置诊断、pages-build-deployment 等）。

### 铸渊立即执行以下排查

```
━━━ 铸渊紧急排查任务 · YM-CD-DEBUG-20260310-002 ━━━

① 读取 .github/workflows/sync-persona-studio.yml 全文
   → 确认触发条件、执行逻辑、依赖的 Secrets/环境变量

② 打开最近一次失败的 run（#85）
   → 展开失败的 step，复制完整错误日志

③ 定位根因，可能的方向：
   a. yml 文件语法错误
   b. 引用了不存在的 Secret
   c. SSH 连接/部署步骤失败
   d. 脚本执行错误（node/python 运行时问题）
   e. 权限/Token 无效

④ 修复问题，提交修复 commit，确认下一次触发时 sync-persona-studio.yml 能跑通

⑤ 同时确认 deploy-to-server.yml 也能正常跑通（开发者上传的模块能自动部署到 guanghulab.com）

⑥ 全部修复完成后，在本页底部追加排查报告，格式：

━━━ 铸渊排查报告 · YM-CD-DEBUG-20260310-002 ━━━
排查时间：[YYYY-MM-DD HH:mm]
commit SHA：[xxx]

① sync-persona-studio.yml 失败原因：[xxx]
② 修复方案：[xxx]
③ 修复 commit：[SHA]
④ 修复后运行结果：✅ / ❌
⑤ deploy-to-server.yml 状态：✅ / ❌
⑥ guanghulab.com 是否显示最新内容：✅ / ❌

【结论】：[CD管线已跑通 / 卡在第X步]
【建议】：[xxx]
✅ YM-CD-DEBUG-20260310-002 排查完成 · [YYYY-MM-DD HH:mm]
```

<aside>
⚒️

**铸渊读到这条指令 = 立即执行 = 不等人 = 修复完自动回报到本页底部**

</aside>

---

## 🔗 关联文档

- CD 部署指令原文：[🚀 铸渊 CD 指令：自动部署 [guanghulab.com](http://guanghulab.com)（push → 自动上线）](%F0%9F%9A%80%20%E9%93%B8%E6%B8%8A%20CD%20%E6%8C%87%E4%BB%A4%EF%BC%9A%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%20guanghulab%20com%EF%BC%88push%20%E2%86%92%20%E8%87%AA%E5%8A%A8%E4%B8%8A%E7%BA%BF%EF%BC%89%20905ba98cce9c4bb3b812d9f7e9d1f35c.md)
- 全仓库模块盘点：[📦 铸渊指令：全仓库模块盘点 + 部署感知同步（霜砚签发·2026-03-07）](%F0%9F%93%A6%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BC%9A%E5%85%A8%E4%BB%93%E5%BA%93%E6%A8%A1%E5%9D%97%E7%9B%98%E7%82%B9%20+%20%E9%83%A8%E7%BD%B2%E6%84%9F%E7%9F%A5%E5%90%8C%E6%AD%A5%EF%BC%88%E9%9C%9C%E7%A0%9A%E7%AD%BE%E5%8F%91%C2%B72026-03-07%EF%BC%89%204c116ef0963c4dc7b0d5c55327d3608e.md)
- 修复部署指令：[🚀 铸渊指令：修复部署 → 全模块上线 [guanghulab.com](http://guanghulab.com)（霜砚签发·2026-03-07）](%F0%9F%9A%80%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BC%9A%E4%BF%AE%E5%A4%8D%E9%83%A8%E7%BD%B2%20%E2%86%92%20%E5%85%A8%E6%A8%A1%E5%9D%97%E4%B8%8A%E7%BA%BF%20guanghulab%20com%EF%BC%88%E9%9C%9C%E7%A0%9A%E7%AD%BE%E5%8F%91%C2%B72026-03-07%207ea69ab50bd94be6bad31f6b8755bb39.md)
- 后端服务启动指令：[🔧 铸渊指令：启动后端服务 → 看板动态数据上线（霜砚签发·2026-03-07）](%F0%9F%94%A7%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BC%9A%E5%90%AF%E5%8A%A8%E5%90%8E%E7%AB%AF%E6%9C%8D%E5%8A%A1%20%E2%86%92%20%E7%9C%8B%E6%9D%BF%E5%8A%A8%E6%80%81%E6%95%B0%E6%8D%AE%E4%B8%8A%E7%BA%BF%EF%BC%88%E9%9C%9C%E7%A0%9A%E7%AD%BE%E5%8F%91%C2%B72026-03-07%EF%BC%89%2027c217cf3f3d482b9149f681f76ab15b.md)