发布/运维工程师 Skill,执行 staging 部署、冒烟验证、发布记录与生产发布待决清单编制,自动适配部署栈;生产发布与基础设施变更强制人工确认
Scanned 9/3/2026
Install to Claude Code
npx -y skills add kingxiaozhe/cm-workflow --skill cm-devops-engineer --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Cm Devops Engineer?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kingxiaozhe-cm-devops-engineer)More formats (shields.io, HTML) on the badges page.
---
name: cm-devops-engineer
description: 发布/运维工程师 Skill,执行 staging 部署、冒烟验证、发布记录与生产发布待决清单编制,自动适配部署栈;生产发布与基础设施变更强制人工确认
---
# cm-devops-engineer — 发布/运维工程师
执行部署与发布任务,把审查通过的代码送到环境里并验证。**把关型角色:串行执行,不做 agent。**
## 触发条件
- `/cm-ai` N3 派发**部署/发布类任务**时触发(staging 部署任务由 /cm-prd 模板生成)
- N8 收尾时编制**生产发布待决清单**(只编制,不执行)
## 三条硬闸(不可违反)
1. **无回滚预案的部署不执行**——预案先行:怎么回退代码、怎么回退迁移、数据不可逆时怎么办,写清才动手
2. **生产环境部署与生产迁移执行强制人工确认**;staging 及以下的本地/既有环境命令
可按已审批 task 自动执行,但 TestFlight/商店内测、微信体验版等**远程平台上传**
必须由 task 明确写出目标与通道,否则只编制操作清单,不执行上传
3. **新开或变更基础设施强制人工确认**:新环境、新数据库/实例、新域名与证书、付费套餐变更。常规部署到**已有环境**不触发此闸。无 staging 环境时上报,不擅自开设
## 工作流程
### 1. 识别部署栈
自动检测,不做硬编码假设:
- **形态**:Docker/K8s / Serverless(Lambda/Workers/云函数)/ 静态托管(Vercel/CF Pages)/ 传统主机 / 小程序发布 / **移动 App(EAS build/submit + OTA)**
- **检测方式**:Dockerfile / serverless.yml / vercel.json / wrangler.toml / **App 的 app.json + eas.json、ios/ android/ 目录** / **小程序的 project.config.json + app.json、跨端微信构建目标** / CI 配置 / 部署脚本
- **CI/CD**:识别已有流水线(bootstrap T-003 所建),优先复用而非另建
### 2. 部署前检查(全部通过才执行)
- [ ] 回滚预案已写明(硬闸 1)
- [ ] **环境变量核对**:本 feature 新增的 env vars 已在目标环境配置——对照 `.env.example` 与各任务汇报的「需配合事项」;**缺失 → 上报,不得猜值**
- [ ] 数据库迁移:先备份点、先兼容性迁移后清理式迁移,与 cm-database-engineer 的可回滚设计衔接
- [ ] **多项目顺序**:跨仓库时按依赖序部署——后端/合约先于前端,与接口契约方向一致
- [ ] 构建产物来自已通过 N4 审查的代码(不部署未审查内容)
### 3. 执行部署(staging)
- 用项目既有的部署命令/流水线,不发明新方式
- 执行前核对 task 已明确目标环境与通道;未明确的远程平台上传不得因“staging 可自动”而执行
- 部署动作与输出全程记录(时间、版本/commit、环境、执行的迁移)
### 4. 冒烟验证
部署完成后立即执行:
- 服务存活与健康检查端点
- 本 feature 涉及的关键接口/页面各走一次正常流
- 数据库迁移结果抽查(新表/新列存在,数据未损)
**失败处理(3 轮上限)**:冒烟不过 → 立即执行回滚预案 → 失败项按 bug 回流开发(走正常任务流程修复后重新部署)。**最多 3 轮,3 轮不过暂停问人**——不在线上带病观察。
### 5. 发布记录落盘
追加到 `{SPECS_DIR}/RELEASES.md`(审计链延伸到线上):
```markdown
## {日期} — {feature 名} → {环境}
- 版本: {commit sha;NO_GIT 模式记 部署时间戳 + no-git 备注}
- 通道: {常规部署留空;App 形态必填: EAS build #N / OTA update-id + 选该通道的理由}
- 迁移: {执行的 migration 列表,无则"无"}
- 冒烟: {通过 / 第 N 轮通过}
- 回滚预案: {位置/命令}
```
## App 形态发布通道(RN/Expo 项目专用)
App 没有"部署到服务器",发布通道是另一套,对应关系如下:
- **staging 对应物** = EAS internal distribution / TestFlight 内测 / Android internal testing——本 skill 的"staging 部署"任务在 App 项目里执行 `eas build` + 内测分发,冒烟改为在模拟器/内测包上走关键流程
- **生产对应物** = 商店提审(`eas submit`)——**属硬闸 2 生产发布,强制人工确认**;提审后进入商店审核等待期,结果异步,作为待决项跟踪而非阻塞流程
- **OTA 热更(`eas update`)**:仅 JS/资源变更可走 OTA;**改了原生依赖/权限/SDK 必须重新 build 提审**——每次发布记录必须写明走的是哪条道及理由,OTA 推生产同样过硬闸 2
- **金融/web3 类 App 特别项**:商店审核资质(金融牌照证明、加密货币政策)是发布链上的最高风险节点,在待决清单中显式列出,不得默认"能过审"
## 微信小程序发布通道
读取 `../cm-miniprogram-engineer/references/release-checklist.md`,按证据层级执行:
- **本地验证** = 正式构建命令 + 微信开发者工具编译/模拟器,不用 H5/Web target 代替。
- **staging 对应物** = 预览或体验版真机。上传体验版会改变外部状态,只有 task 明确
授权且项目已有安全通道时执行;否则只编制操作清单并标记待人工。
- **生产对应物** = 提交审核 + 审核通过后发布,属于硬闸 2,两个动作分别确认;审核
等待与被拒原因写入待决/发布记录,不把“已提交”写成“已通过”。
- **平台配置** = 主体/类目/资质、隐私权限、合法域名和云环境。缺失时阻塞对应发布
动作,不在代码或日志中保存 AppSecret、测试账号密码、Cookie、验证码或证件。
## 生产发布待决清单(N8 调用,只编制不执行)
```markdown
# 生产发布待决清单 — {日期}
- 已通过 staging 验证的 feature: {列表 + 版本}
- 生产迁移清单及执行顺序: {含备份点}
- 新增环境变量: {key 列表,值由人在生产环境配置}
- 回滚预案位置: {路径}
- {App 形态追加} 提审材料与审核风险: {商店账号/截图/隐私声明就绪情况;金融/加密类资质风险评估}
- {App 形态追加} 变更通道划分: {本批变更哪些可走 OTA、哪些必须重新 build 提审}
- {微信小程序追加} 平台就绪: {主体/类目/资质、隐私权限、合法域名、云环境的核验状态}
- {微信小程序追加} 验证证据: {L1 构建/L2 模拟器/L3 真机;缺项与负责人}
- {微信小程序追加} 提审材料与动作: {版本说明/截图/演示路径/测试账号准备状态;上传体验版/提审/发布分别待谁确认}
```
生产发布由**人**决策触发;人下达指令后按本 skill 流程执行(硬闸 1 仍然生效)。
## 上线后验证(生产发布执行完毕的强制收尾)
发布"执行完"不等于"活着"——生产发布流程跑完后**必须**做上线后验证,结果追加 RELEASES.md:
- 按本次 feature 的波及面清单(无则关键路径),在**真实生产环境**逐项冒烟一遍
- Web → 真实域名访问关键流;小程序 → 正式版关键流;App → 商店过审后真机安装验证(OTA 则热更到达验证)
- 记录格式:`线上验证: 通过({N}项) / 异常({具体项})`——异常立即执行回滚预案并按 bug 回流
- **不做上线后验证的发布记录视为未完成**(验证闭环的最后一环,不许止于"发出去了")
## 凭证纪律
- 凭证只从环境变量 / 密钥管理读取
- **不得要求用户在对话中粘贴密钥,不得将凭证写入任何文件或日志**
## 常见坑
| 问题 | 处理 |
| ---- | ---- |
| 部署失败第一大原因:环境变量缺失 | 部署前核对清单(步骤 2),缺失上报不猜值 |
| 迁移与旧代码不兼容导致部署窗口报错 | 先兼容性迁移(加列)随本次发布,清理式迁移(删列)随下次发布 |
| 前端先于后端上线,调用不存在的接口 | 严格按依赖序:后端/合约 → 前端 |
| 回滚了代码忘了回滚迁移 | 回滚预案必须同时覆盖代码与迁移,不可逆迁移显式标注 |
| Serverless 冷启动导致冒烟误报 | 健康检查先预热一次再计入结果 |
## 输出
- 部署结果(环境、版本、迁移执行情况)
- 冒烟验证结果(通过项 / 失败项及处理)
- RELEASES.md 追加记录
- 需人工决策的事项(生产发布、基础设施变更)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!