From nbl.superpowers
Deploys guozhi-series internal and BFF services to dev environments. Handles git commit/push, parallel jkd+jku deployment, and optional BFF passthrough verification.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nbl.superpowers:nbl.deployThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
将当前内部服务及对应的 BFF 层服务部署到用户选择的 dev 环境。
将当前内部服务及对应的 BFF 层服务部署到用户选择的 dev 环境。
流程启动时,用 AskUserQuestion 同时询问两个问题,不要分两次问:
问题:「部署到哪个环境?」
| 选项 | 说明 |
|---|---|
| dev1 | 开发环境 1 |
| dev2 | 开发环境 2 |
| dev3 | 开发环境 3 |
用户选择后,记为 <env>,后续所有命令中的环境参数都使用此值。
问题:「是否需要部署 BFF?」
| 选项 | 说明 |
|---|---|
| 不部署 BFF | 只部署当前内部服务,跳过 BFF 相关所有步骤 |
| ops-app | 部署到 ops-app BFF |
| edu-app | 部署到 edu-app BFF |
选项由配置决定:只展示配置文件中已配置的 BFF 项目 + "不部署 BFF" 选项。 例如用户只配置了 ops-app,则选项为:不部署 BFF / ops-app。
用户选"不部署 BFF" → 跳过步骤 3 和 4,步骤 1 完成后流程结束。
BFF 项目的本地路径不是写死在 skill 里的,而是存储在配置文件中,首次使用时引导用户完成配置。
配置文件路径: ~/.claude/skills/deploy/config.json
配置格式:
{
"ops-app": "D:\\workspace\\guozhi-ops-app",
"edu-app": "D:\\workspace\\guozhi-edu-app"
}
两个 BFF 项目只需配置至少一个即可。用户可能只用其中一个。
启动选项中询问 BFF 时,按以下逻辑处理:
~/.claude/skills/deploy/config.jsontest -d <path>,用户可能迁移过项目目录)配置中 的路径
<path>不存在,可能是项目目录已迁移。请更新配置文件~/.claude/skills/deploy/config.json后重新触发部署。
当需要配置时,用 AskUserQuestion 逐个询问:
问题 1:「ops-app 的本地项目路径是什么?(留空表示不使用该 BFF)」 问题 2:「edu-app 的本地项目路径是什么?(留空表示不使用该 BFF)」
用户输入路径后:
test -d <path>),不存在则提示重新输入~/.claude/skills/deploy/config.jsonmkdir -p ~/.claude/skills/deploy/流程开始时(启动选项确认后),用 TaskCreate 创建以下任务清单,让用户在侧边栏实时看到部署进度:
| 任务 subject | 说明 |
|---|---|
0. 前置检查 | 检查工作区状态,提交推送 |
1. 部署当前服务 | 并行执行 jkd + jku |
2. BFF 透传检查 | BFF git pull → 识别变更接口 → 补写透传 → git commit/push(选了 BFF 时才有) |
3. 部署 BFF 服务 | 执行 jkd 部署 BFF(选了 BFF 时才有) |
如果用户选了"不部署 BFF",则只创建任务 0 和 1。
每进入一个步骤前,先 TaskUpdate 将对应任务设为 in_progress;完成时设为 completed。
如果某步骤失败,任务保持 in_progress,不标记完成。
部署前先确认当前分支工作区干净且已与远程同步,避免把过期或本地未推送的代码误带入部署包。
git status --short 和 git status -sb,判断:
git status --short 非空git status -sb 中分支显示 ahead Ngit add -A — 暂存所有变更(含新增、修改、删除)git commit — 提交,commit message 规则:
git diff --cached --stat 获取变更文件列表deploy: <一句话概括变更>(如 deploy: 添加FuncNameManager,表单模板名称字段赋值)deploy: 提交当前工作区变更git pull — 拉取远端最新代码(处理可能的合并)git push — 推送到远端在当前工作目录下,并行执行以下两个命令:
jkd <env>jku <env>两个命令必须同时启动,不要串行等待。用 run_in_background 或 & 并发执行。
检查结果:
如果启动时选了"不部署 BFF" → 流程到此结束。
这是部署 BFF 之前的关键环节:确保 BFF 层已经透传了内部服务新增或变更的接口,并且代码已推送到远端。
记下用户在启动选项中选择的 BFF 名称和路径,本步骤及后续都在该 BFF 目录下操作。
在 BFF 项目中执行以下操作(与步骤 0 相同的逻辑):
cd "<path>")git pull,拉取远端最新代码git status --short,若有未提交变更:
git add -Agit commit -m "deploy: 提交BFF当前工作区变更"git push为什么先 pull 再写透传:避免在旧代码基础上写透传,减少合并冲突风险。先同步到最新,再增量修改。
只关注本会话中实际修改过的 api 文件,而非整个分支的 diff。长期功能分支的 diff 量通常很大,大部分是历史变更,与本次部署无关。
识别方式: 检查本会话中通过 Edit/Write 工具修改过的文件,筛选出路径匹配 api/**/api/*.java 的文件,提取其中的 Feign API 方法。
具体步骤:
api/**/api/*.java 文件路径@PostMapping / @GetMapping 等注解标注的方法如果本会话没有修改过 api 文件 → 跳过 2c/2d,直接进入步骤 3。
为什么不用 git diff:长期功能分支(如
feature/sprint200)相对 develop 的 diff 可能包含数百个文件变更,其中大部分是历史提交,与本次部署无关。聚焦本会话修改的文件,范围精准,避免噪音。
对每个变更接口,用 AskUserQuestion 询问用户:
问题:「本次变更了以下接口,BFF 层是否已经透传?」
选项设计为三级:
TenantDictController)com.guozhi.api.opsapp.controller.configcenter)如果用户选 2 或 3,追问:
根据用户的选择,在 BFF 项目中补充开发:
BFF 透传代码编写规范:
@PostMapping("/xxx")
@Operation(summary = "xxx")
public XxxResp xxx(@Valid @RequestBody XxxReq request) {
request.setOperatorId(UserHolder.getUserId()); // 写操作必加
request.setTenantId(UserHolder.getTenantIdLong()); // 读操作必加(写操作也加)
return xxxApi.xxx(request);
}
关键要点:
/guozhi-op/(ops-app)或 /guozhi-edu/(edu-app),加上内部服务的路径UserHolder 设置 operatorId 和 tenantIdtenantId写完后确认 BFF 项目编译通过:mvn compile -pl app -am(编译失败也继续 2e,但需向用户说明)
透传代码写完后,必须自动提交并推送到远端,否则 Jenkins 构建时拉不到新代码,部署就是旧版本。
在 BFF 项目目录下执行:
git add -Agit commit -m "deploy: 透传<接口描述>接口"(如 deploy: 透传表单模板规则CRUD接口)git push这和步骤 0 的逻辑一致:不推送到远端的代码,Jenkins 无法构建。
步骤 2e 已将透传代码推送到远端,现在触发 Jenkins 构建。
cd "<path>",不要用 cd /d,bash 不识别)jkd <env>如果失败 → 报告错误,流程结束。
<env> 变量由用户在启动选项中选择,贯穿整个流程,不硬编码~/.claude/skills/deploy/config.json 读取,不硬编码在 skill 中npx claudepluginhub icefrag/nbl-superpowers --plugin nbl.superpowersOrchestrates environment-aware git commits, pushes, CI/CD triggers, and deployment verifications with pre-flight checks and production safety gates.
Guides reliable deployments in environments without CI/CD platforms using shell scripts, blue-green switching, smoke tests, and rollback.
Deploys built projects to platforms like Vercel, Cloudflare Workers, Supabase. Detects CLI tools, reads stack YAML for config, sets up DB/env, pushes code, verifies live status.