# Cm Devops Engineer

> 发布/运维工程师 Skill，执行 staging 部署、冒烟验证、发布记录与生产发布待决清单编制，自动适配部署栈；生产发布与基础设施变更强制人工确认

- **Type:** Skill
- **Install:** `agentstack add skill-kingxiaozhe-cm-workflow-cm-devops-engineer`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [kingxiaozhe](https://agentstack.voostack.com/s/kingxiaozhe)
- **Installs:** 0
- **Category:** [Cloud & Infrastructure](https://agentstack.voostack.com/c/cloud-infrastructure)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [kingxiaozhe](https://github.com/kingxiaozhe)
- **Source:** https://github.com/kingxiaozhe/cm-workflow/tree/main/skills/cm-devops-engineer

## Install

```sh
agentstack add skill-kingxiaozhe-cm-workflow-cm-devops-engineer
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 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 追加记录
- 需人工决策的事项（生产发布、基础设施变更）

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [kingxiaozhe](https://github.com/kingxiaozhe)
- **Source:** [kingxiaozhe/cm-workflow](https://github.com/kingxiaozhe/cm-workflow)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-kingxiaozhe-cm-workflow-cm-devops-engineer
- Seller: https://agentstack.voostack.com/s/kingxiaozhe
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
