@numa-tech/numa 1.14.16 → 1.14.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -4
- package/dist/application-onboarding/schemas.d.ts +1 -4
- package/dist/application-onboarding/schemas.js +1 -1
- package/dist/application-onboarding/schemas.js.map +1 -1
- package/dist/platform-build-job-replans/client.d.ts +8 -0
- package/dist/platform-build-job-replans/commands.js +3 -1
- package/dist/platform-build-job-replans/commands.js.map +1 -1
- package/dist/platform-build-job-replans/schemas.d.ts +2 -0
- package/dist/platform-build-job-replans/schemas.js +1 -0
- package/dist/platform-build-job-replans/schemas.js.map +1 -1
- package/dist/platform-profile.d.ts +4 -0
- package/dist/platform-profile.js +3 -1
- package/dist/platform-profile.js.map +1 -1
- package/package.json +3 -3
- package/skills/numa-create-application/SKILL.md +5 -1
- package/skills/numa-create-application/agents/openai.yaml +1 -1
- package/skills/numa-create-application/evals/evals.json +25 -0
- package/skills/numa-create-application/references/checklist.md +2 -0
- package/skills/numa-create-application/references/numa-cli.md +6 -2
- package/skills/numa-create-application/references/promote-workflows.md +27 -1
- package/skills/numa-jenkins-deployment/SKILL.md +147 -0
- package/skills/numa-jenkins-deployment/agents/openai.yaml +4 -0
- package/skills/numa-jenkins-deployment/evals/evals.json +69 -0
- package/skills/numa-jenkins-deployment/references/cli-contract.md +120 -0
- package/skills/numa-jenkins-deployment/references/diagnostics.md +121 -0
- package/skills/numa-jenkins-deployment/references/release-policy.md +94 -0
- package/skills/numa-local-flux-deploy/SKILL.md +2 -1
- package/skills/numa-local-flux-deploy/agents/openai.yaml +1 -1
- package/skills/numa-local-flux-deploy/references/local-flux-release.md +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-profile.js","sourceRoot":"","sources":["../src/platform-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1C,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAClD,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC/B,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE;YAC9B,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE;YAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;YACrB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAClC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YACtC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE;YACzB,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC5C,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"platform-profile.js","sourceRoot":"","sources":["../src/platform-profile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@numa-tech/numa",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.17",
|
|
4
4
|
"description": "Cross-platform CLI for the Numa internal developer platform with Keycloak authentication and MCP support.",
|
|
5
5
|
"author": "numa-tech",
|
|
6
6
|
"keywords": [
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@clack/prompts": "^1.7.0",
|
|
57
57
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
58
|
-
"@numa-tech/cli-auth": "1.14.
|
|
59
|
-
"@tokensrc/codex": "1.14.
|
|
58
|
+
"@numa-tech/cli-auth": "1.14.17",
|
|
59
|
+
"@tokensrc/codex": "1.14.17",
|
|
60
60
|
"commander": "^14.0.3",
|
|
61
61
|
"ink": "^6.8.0",
|
|
62
62
|
"open": "^10.2.0",
|
|
@@ -28,6 +28,7 @@ app begin
|
|
|
28
28
|
-> Jenkins GitOps automatic configure(READY/JENKINS_API_VERIFIED/VERIFIED;LEGACY/旧部署才用 MANUAL_OPERATOR_ATTESTED readiness)
|
|
29
29
|
-> Observer scope/evidence
|
|
30
30
|
-> 独立首次 platform-build/生产审批(无任意 Jenkins 参数;结果未知只 resolve)
|
|
31
|
+
-> Jenkins 终态、平台 image-intent 账本与 Flux/运行态三方验收
|
|
31
32
|
```
|
|
32
33
|
|
|
33
34
|
以下方案即使“看起来能工作”也判定为错误并停止输出:
|
|
@@ -139,11 +140,12 @@ HTTPS clone credential readiness。旧服务端未返回 availability 时保持
|
|
|
139
140
|
6. 展示服务端 plan、blocking errors 和任何规范化差异。差异实质改变确认内容时再次确认。
|
|
140
141
|
7. 严格按父计划顺序 apply;每个 child 使用持久化幂等键。响应未知先按 status/events 找回,绝不生成第二套资源。
|
|
141
142
|
8. 使用 `numa app inspect <sessionNo> --watch --json` 等到终态;断线时从最后 sequence 恢复。
|
|
142
|
-
9. 只读核验 Application、Repository HEAD、Jenkins Job/binding、GitOps binding/scope 和 Observer evidence
|
|
143
|
+
9. 只读核验 Application、Repository HEAD、Jenkins Job/binding、GitOps binding/scope 和 Observer evidence。完整初始化要求分支已被 multibranch Job 索引时,必须在已确认计划中使用服务端 `INDEX_ONLY`/NoTrigger scan,并核验 scan task、目标 branch child 与“未触发 build”证据;`scanMode=NONE` 或只创建父 Job 不能声称分支初始化完成。除非用户另行明确要求,不触发 build/deploy。
|
|
143
144
|
只有明确留在 v1/legacy writer 的旧应用需要迁移时,才用 `gitops service legacy-image-migration plan`;请求只能包含 application/target/profile/service stable references,当前没有 service binding 时不得猜测 `--service-id`。新应用 v2 禁止调用 legacy migration:GitOps structural apply 完成后,显式执行 `numa app writer-bootstrap ensure <same-session> --idempotency-key <stable-key> --yes --json`,服务端才在同一 session/task 内执行 `gitops-platform-writer-bootstrap/v2`,且只读写服务自身的 base release、exact overlay values 与 overlay kustomization 三个文件。CLI 不接受 repository/path/branch/YAML/binding/target/Secret,也不创建新 Application、session、binding 或 target;用原 session 的 `app inspect --watch --after-sequence` 读取 `GITOPS_V2_WRITER_BOOTSTRAP` 事件。只有 exact contract/identity/revision/digest 匹配且状态成功才能进入 Observer/first-build;初始 POST 结果未知时只用原 key 精确重放,已持久 child 为 `UNKNOWN` 时先 inspect,再显式 `numa app retry <same-session> --json` 恢复原 same-run/key。仍为 `UNKNOWN` 或出现 drift 时继续 fail closed。输出不展示 path/diff/pointer/file content。
|
|
144
145
|
若 blocker 是 `GITOPS_RAW_SECRET_FORBIDDEN`,不得读取/回显 Secret value、把值改成普通 base64、直接删除资源或绕过 plan。优先迁移到平台已登记的 ExternalSecret/SealedSecret provider。目标集群没有 provider 时,只能提出经单独变更单审批的两阶段桥:先在 clean、受控的 Flux 仓库中为现有 Flux-managed Secret 加 `kustomize.toolkit.fluxcd.io/prune: disabled`,reconcile 并由 Observer/live evidence 验证 annotation;再以另一变更单移除 raw manifest/reference,reconcile 并验证 Secret 仍存在,最后由 secret owner 轮换所有曾进入 Git 历史的值。本地 `mci-flux` dirty 时停止,应用创建的笼统确认不能替代任一步审批。
|
|
145
146
|
新应用必须使用独立 `jenkins platform-build-rollout` plan/apply/configure;旧 `jenkins gitops-rollout` 保持 v1/manual readiness,不得用来承载 v2。automatic configure 前,新入口仓库必须已通过 Project Publication CAS 发布只含 exact `@Library('mciShareLib@<approvedSharedLibraryRevision>') _` 与 `platformBuildEntry()` 的 Jenkinsfile,以及 strict `.mci/platform-build.yaml`。该清单只允许平台 build profile 白名单字段;生产快照执行 server-owned wrapper,不加载应用 Jenkinsfile。缺少任一证据时停止并回到 Publication plan,不能手工 Git push、改 Jenkins global library、复用旧 `buildEntry()` 或改用 `mcexShareLib`。configure 只提交 `expectedVersion`,不接受 env/XML/Groovy/token/credential ID/value/operator attestation;只有服务端回传 credential 配置布尔值、observed shared-library revision、verified source revision、Jenkinsfile/build-profile/configuration digest 和 `READY/JENKINS_API_VERIFIED/VERIFIED` 才通过。verified source revision 是源码快照,不要求等于 approved shared-library revision;固定 annotation 才必须引用 approved revision。v2 没有 manual readiness;`MANUAL_OPERATOR_ATTESTED readiness` 仅属于 v1/LEGACY。rollout 达到 READY 前不触发首次 build。
|
|
146
147
|
10. 用户明确要求 promote/deploy 时,完成入驻后转入 `numa-jenkins-deployment` 的生产预检。v2 首次构建由原 onboarding session 的 first-build action 内部路由到 platform-build;独立恢复使用 `numa pipeline platform-build resolve/status/log`。不得回退旧 `pipeline build`,不得传任意 build parameters;应用创建确认不能替代生产审批。
|
|
148
|
+
11. v2 first-build/Jenkins 在“更新环境镜像”阶段终态失败或 image intent 长时间 `UNKNOWN` 时,先按同一 request 读取 status/log,再把平台请求、SCM 远端和 Flux/Observer 当作三个独立事实核验。远端目标 HEAD 已含本次稳定 request marker 且目标文件的 image repository/tag/digest 与原 intent 完全一致,只能说明原 CAS 可能已成功;它不授权重放 build、生成新 key、手工再写 Flux 或把平台记录改成成功。运行时已健康但平台账本未收敛时,明确报告“运行态已部署、平台账本未决”,等待服务端支持的原请求 reconcile/recover;运行时健康不能冒充 onboarding/发布闭环完成。
|
|
147
149
|
|
|
148
150
|
### 6. 失败与恢复
|
|
149
151
|
|
|
@@ -158,6 +160,7 @@ HTTPS clone credential readiness。旧服务端未返回 availability 时保持
|
|
|
158
160
|
- `ENSURE_WRITER_BOOTSTRAP` 是 onboarding v3 的独立 capability action,对应 `app writer-bootstrap ensure`;请求只能含原 session 与稳定幂等键。初始 POST 结果未知时先 inspect,再只用原 key 精确重放;已持久 child 为 `UNKNOWN` 时才显式调用通用 `app retry <same-session>` 恢复原 run/key。普通 status/inspect 与 first-build 未知结果恢复保持纯读,不重放 first-build POST。仍为 `UNKNOWN`、三文件集合/identity/revision/digest drift 都阻断 Observer 和 first-build;不得改调 legacy migration、新建 session/身份或直读/改 SCM/Secret 来恢复。
|
|
159
161
|
- legacy image migration plan 没有 Idempotency-Key/resolve-by-key,结果不明时必须 fail closed,不自动重放。Jenkins rollout plan create 也没有 resolve-by-key;apply 只有当 list 显示 exact application/instance/plan mode 且较写前 baseline version 增长才报告恢复;configure 响应未知时不重放,只 GET 同 rollout,并要求 exact identity/intent、version 增长、credential booleans=true、observed shared-library revision、verified source revision、Jenkinsfile/configuration digest 完整和 `READY/JENKINS_API_VERIFIED/VERIFIED`;verified source revision 不与 approved library revision 混同。`STALE/DRIFTED/UNAVAILABLE` 或证据缺失均 result unknown。旧 readiness 只有 GET 同 rollout 显示 exact reference/mode/status/identity 且 version 增长才报告恢复。预存 READY/LEGACY 不是本次写入证据。
|
|
160
162
|
- v2 `platform-build trigger` 的 POST 只发送一次;未知响应只按原 idempotency key 调 `pipeline platform-build resolve`。stop 也只发送一次,未知后只 GET 同 requestId。任何参数、APPROVE_ID、Docker/Git/proxy 环境变量都不得进入 snapshot;productionReason 只留平台审计。Jenkins 不持有 Flux Git 凭据,镜像更新由平台 server-owned CAS 完成。
|
|
163
|
+
- `platform-build` 的 GitOps writer 结果未知时,恢复必须匹配同一 application、binding/target、request/build、source revision、image repository/tag/digest、expected old head、稳定 request marker、远端 target HEAD/revision 和目标文件内容。只有受支持的服务端 reconcile/recover 能据此把账本从 `UNKNOWN` 推进到已验证终态;当前 command catalog 没有该能力时保持未决,不直改数据库、不伪造 `SUCCESS`、不通过本地 Flux fallback 重写同一版本。
|
|
161
164
|
|
|
162
165
|
所有展示给用户的命令必须可直接复制:不要带 diff 的字面 `+`/`-` 前缀,不要把 shell continuation
|
|
163
166
|
写成伪格式,也不要在命令中展开凭据、绝对本地路径或文件内容。
|
|
@@ -171,6 +174,7 @@ HTTPS clone credential readiness。旧服务端未返回 availability 时保持
|
|
|
171
174
|
- 本地源码发布场景中,远端 tree/commit evidence 与锁定 manifest/HEAD 一致;
|
|
172
175
|
- 流水线绑定存在,tier/branch/buildability 符合确认;
|
|
173
176
|
- 要求 GitOps 时,service binding、scope 和运行态 evidence 状态明确;未达 ACTIVE 时返回具体 recovery action;
|
|
177
|
+
- 完整 promote/deploy 还要求 Jenkins/build 终态、平台 image-intent 账本和 Flux/Observer exact revision 三方一致;仅 Flux/Deployment 健康时只报告运行态成功,不报告平台自动化闭环成功;
|
|
174
178
|
- 未意外触发构建或部署;
|
|
175
179
|
- session 终态明确,idempotency key 和安全的资源 ID 已记录;
|
|
176
180
|
- 数据库/集群待办明确标为已执行或 `DEFERRED`,没有把推断值冒充平台事实。
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Numa 应用创建"
|
|
3
3
|
short_description: "安全规划源码、应用入驻、Jenkins v1/v2 与 GitOps promote 闭环"
|
|
4
|
-
default_prompt: "使用 $numa-create-application 分析当前项目,先自述运行时能力,再协作确认并通过 Numa CLI 完成 Repository、源码发布、应用、Jenkins
|
|
4
|
+
default_prompt: "使用 $numa-create-application 分析当前项目,先自述运行时能力,再协作确认并通过 Numa CLI 完成 Repository、源码发布、应用、Jenkins multibranch INDEX_ONLY 扫描、GitOps 与 Observer 计划。新应用使用 v2 writer bootstrap、独立 platform-build-rollout automatic configure 和 platform-build;默认不触发构建或部署。若运行态已部署但 image-intent 账本未决,分开报告并只恢复原请求。"
|
|
@@ -130,6 +130,31 @@
|
|
|
130
130
|
"拒绝手工写 Flux SCM、枚举/读取/修改 Secret、调用 legacy-image-migration;UNKNOWN 或 drift 继续 fail closed。",
|
|
131
131
|
"旧 v1 流程不受这一 onboarding v3 内部恢复语义影响。"
|
|
132
132
|
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": 10,
|
|
136
|
+
"prompt": "新应用的 platform-build 在 Update Environment Image 阶段报告 GitOpsUnknownResult;原 request 对应的远端 Flux HEAD 已含稳定 marker,image tag/digest 精确匹配,Flux 和 Deployment 已健康,但平台 intent 仍 UNKNOWN。能否重新 first-build 或用本地 Flux 再推一次?应用初始化是否算完成?",
|
|
137
|
+
"expected_output": "区分运行态成功和平台账本未决,不重放 first-build/Flux 写入;只恢复同一 durable request,并要求 Jenkins/build、platform ledger、Flux/runtime 三方一致后才宣告完整初始化与部署闭环。",
|
|
138
|
+
"files": [],
|
|
139
|
+
"assertions": [
|
|
140
|
+
"不重新 first-build、不换 key、不创建第二个 image/commit、不手工再写 Flux、不直改数据库或伪造 SUCCESS。",
|
|
141
|
+
"要求精确匹配 application、binding/target、request/build、source revision、image repository/tag/digest、expected old head、marker 和 remote HEAD/file content。",
|
|
142
|
+
"说明 Flux/Deployment healthy 只证明 runtime,报告 RUNTIME_DEPLOYED / PLATFORM_LEDGER_UNRESOLVED。",
|
|
143
|
+
"只有服务端对同一 durable request 的受支持 reconcile/recover 能推进账本;当前 command catalog 没有时停止。",
|
|
144
|
+
"明确完整初始化/发布闭环还未完成,直到 Jenkins/build、platform ledger、Flux/runtime 三方一致。"
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": 11,
|
|
149
|
+
"prompt": "新建了 multibranch 父 Job,但 onboarding spec 使用 scanMode=NONE,Jenkins 中没有任何 branch child。用户要求完成应用初始化且不能触发构建。现在能否算完成?",
|
|
150
|
+
"expected_output": "不能;完整初始化需经服务端 INDEX_ONLY/NoTrigger scan,验证 scan task、目标 branch child 和无意外 build,然后才能通过该门禁。",
|
|
151
|
+
"files": [],
|
|
152
|
+
"assertions": [
|
|
153
|
+
"说明只创建父 Job 或 scanMode=NONE 不等于 branch 已初始化。",
|
|
154
|
+
"要求使用受治理的 INDEX_ONLY/NoTrigger scan,不直接在 Jenkins UI 绕过平台。",
|
|
155
|
+
"核验 scan task 终态、目标 branch child/Jenkinsfile 和没有触发 build 的证据。",
|
|
156
|
+
"保持首次 build 为独立授权,scan 不能替代生产审批。"
|
|
157
|
+
]
|
|
133
158
|
}
|
|
134
159
|
]
|
|
135
160
|
}
|
|
@@ -94,6 +94,8 @@
|
|
|
94
94
|
- Repository、Publication、Jenkins、GitOps、Observer 各 child plan/run 和 last event sequence;
|
|
95
95
|
- standalone publication plan create 的原 clientRequestId、一次 POST、有界 GET resolve、`STANDALONE`/repository identity 与 retryable 404 待恢复证据;
|
|
96
96
|
- v2 Job provenance、platform-build 与独立 `platform-build-rollout` plan/apply/configure(旧 v1 `gitops-rollout` 才列 migration/manual readiness)的 unknown-result baseline/readback 证据;writer bootstrap 记录独立 action key、原 session 中 `GITOPS_V2_WRITER_BOOTSTRAP` 的 exact contract/status/identity/revision/digest。初始 POST UNKNOWN 必须先 inspect 并只重放原 key;显式通用 `app retry` 仅恢复已持久 child 的原 session/run/key;记录 retry 前后 sequence 与服务端 recovery action。platform-build trigger/stop 都只POST一次并用原key/request GET恢复;configure 只接受同 rollout version 增长、source/Jenkinsfile digest 完整且 exact `READY/JENKINS_API_VERIFIED/VERIFIED` 的 GET evidence;旧 READY/LEGACY 不得记为本次 recovered;
|
|
97
|
+
- multibranch 初始化是否要求 `INDEX_ONLY` scan、scan task/branch child evidence 和 no-trigger 证明;`scanMode=NONE` 或只有父 Job 时不得标记分支初始化完成;
|
|
98
|
+
- platform-build writer 未决时记录 application、binding/target、request/build、source revision、image repository/tag/digest、expected old head、request marker、远端 target HEAD/revision/file content 与 Flux observed revision;分别给出 Jenkins/build、platform ledger、Flux/runtime 状态,禁止把 runtime healthy 单独写成自动化闭环成功;
|
|
97
99
|
- 预期外部副作用;
|
|
98
100
|
- 生产审批需求;
|
|
99
101
|
- blocking warnings、恢复动作和回滚边界。
|
|
@@ -173,7 +173,7 @@ CLI 只从 clean Git HEAD 构造受限 bundle,输出不回显文件内容或
|
|
|
173
173
|
"tier": "DEVELOP",
|
|
174
174
|
"defaultBranch": "main",
|
|
175
175
|
"jenkinsfilePath": "Jenkinsfile",
|
|
176
|
-
"scanMode": "
|
|
176
|
+
"scanMode": "INDEX_ONLY"
|
|
177
177
|
},
|
|
178
178
|
"targetKey": "develop",
|
|
179
179
|
"profileCode": "MCI_FLUX_V1",
|
|
@@ -231,7 +231,7 @@ numa app inspect <session-no> --watch --after-sequence <last-sequence> --json
|
|
|
231
231
|
session/run/key。retry 后仍须读取同一 `GITOPS_V2_WRITER_BOOTSTRAP` 的 exact 成功证据;UNKNOWN/drift
|
|
232
232
|
继续阻断,不重放 first-build POST、不手工修改 SCM、不创建新身份。
|
|
233
233
|
|
|
234
|
-
Jenkins Job Control Plane 使用 `numa jenkins job plan .../apply/status/events
|
|
234
|
+
Jenkins Job Control Plane 使用 `numa jenkins job plan .../apply/status/events`;独立 Job 操作仍可使用 `scanMode=NONE`,但完整应用初始化固定使用服务端 NoTrigger 验证的 `INDEX_ONLY` 并要求目标 branch child 可构建。`app jenkins-binding confirm` 只确认关系,不触发 build。首次 build 必须单独执行 `app first-build decide --decision trigger`;生产场景切换到 `numa-jenkins-deployment` 并提供真实审批证据。
|
|
235
235
|
|
|
236
236
|
新应用 v2 与 legacy writer 是两条并行路径。v2 使用同一 Application/session/repository/binding/target 做 Job provenance replan,完成 GitOps structural apply 后再由 onboarding 自动执行上述 internal bootstrap;不运行 legacy migration。旧 v1 应用确有 pointer 缺失时才运行 migration。`code-index` 的旧 approved commit `230e0f...` 只属于 v1,v2 必须使用本次新发布的 shared-library 40hex:
|
|
237
237
|
|
|
@@ -264,6 +264,9 @@ v2 `platform-build-rollout` 所有写入要求 Idempotency-Key 与 `--yes`,且
|
|
|
264
264
|
numa jenkins job status --client-request-id <original-id> --json
|
|
265
265
|
numa app publication resolve <session-no> --client-request-id <original-id> --json
|
|
266
266
|
numa app inspect <session-no> --after-sequence <last-sequence> --json
|
|
267
|
+
numa pipeline platform-build resolve --client-request-id <original-id> --json
|
|
268
|
+
numa pipeline platform-build status <request-id> --watch --json
|
|
269
|
+
numa pipeline platform-build log <request-id> --start 0 --json
|
|
267
270
|
```
|
|
268
271
|
|
|
269
272
|
CLI 只有在写前 event cursor 之后观察到与本次 planHash/精确 intent 匹配的新持久事件时,才可能返回 `recovered_from_status=true`;既有 `WAITING_EXTERNAL` 或旧输出字段不能作为恢复证据。Repository、Publication、Jenkins 的 resolved run 还必须匹配请求 planNo 和响应中可用的稳定 workload identity。
|
|
@@ -271,6 +274,7 @@ v2 `platform-build-rollout` 所有写入要求 Idempotency-Key 与 `--yes`,且
|
|
|
271
274
|
- HTTP 2xx 后客户端 schema 解析失败不代表服务端失败。先 list/get 核实资源,禁止直接重放 POST。
|
|
272
275
|
- legacy migration plan 无 Idempotency-Key/resolve-by-key,结果未知时 fail closed。Rollout plan create 也不按 key resolve;apply 必须用写前 list baseline 与写后 exact application/instance/plan mode/new version 恢复;configure 未知时不重放,只 GET 同 rollout,并要求 exact identity/intent、new version、credential booleans=true、observed shared-library revision、verified source revision、Jenkinsfile/configuration digest 与 `READY/JENKINS_API_VERIFIED/VERIFIED`,否则 result unknown;source revision 不与 approved library revision 混同。旧 readiness 必须用同 rollout 的 exact reference/mode/status/identity/new version 恢复。预存 READY/LEGACY 不是成功证据。
|
|
273
276
|
- `WAITING_EXTERNAL` 使用 `resume`;可重入失败使用 `retry`;HEAD 移动使用 `reassess`。按服务端 recovery action 选择,不自行跳步骤。对 v3 writer bootstrap,按 recoveryAction 显式执行 `writer-bootstrap ensure`;初始响应未知只重放原 key,已持久 child UNKNOWN 才用 `app retry <same-session>` 恢复 same-run/key,普通 status/inspect 和 first-build unknown recovery 都保持纯读。
|
|
277
|
+
- v2 platform-build 的 trigger/stop POST 都只发送一次。若 Jenkins 在 GitOps image update 阶段失败或 image intent 为 `UNKNOWN`,只用原 request 的 resolve/status/log;再由平台核验 exact application、binding/target、source revision、image repository/tag/digest、expected old head、request marker、远端 target HEAD/revision/file content。Flux/Deployment 已消费 exact revision 只证明运行态,不证明平台账本完成。command catalog 未提供同一 durable request 的 reconcile/recover 时,报告 `RUNTIME_DEPLOYED / PLATFORM_LEDGER_UNRESOLVED` 并停止;不要换 key、重放 build、手工写 Flux、直改数据库或伪造成功。
|
|
274
278
|
- 生产 `pipeline build`、stop、retry 需要独立审批 ID 或具体 production reason;本 skill 默认只创建/核验流水线。
|
|
275
279
|
- 不启动或遗留 `kubectl port-forward`、SSH tunnel 或后台代理来绕过网关;只读恢复仍失败时报告 profile/API origin、request ID 和上述恢复命令,等待平台恢复。
|
|
276
280
|
|
|
@@ -93,7 +93,7 @@ COMPLETED
|
|
|
93
93
|
|
|
94
94
|
已部署应用可采用 `ATTACH_APPLICATION`,但必须验证团队、repository、Jenkins 与运行态身份一致。Candidate adopt 不得创建一个与 onboarding reservation 冲突的第二个 Application。
|
|
95
95
|
|
|
96
|
-
Jenkins Job 创建、配置和 `INDEX_ONLY` scan 必须验证不会触发 build
|
|
96
|
+
Jenkins Job 创建、配置和 `INDEX_ONLY` scan 必须验证不会触发 build;完整应用初始化固定使用 `scanMode=INDEX_ONLY`。首次 build 是独立 promote 决策:`DEFER` 永不触发且 parent 保持 `WAITING_EXTERNAL`,`TRIGGER` 必须使用 confirmed binding。生产 build 转入 `numa-jenkins-deployment`,要求真实审批依据。
|
|
97
97
|
|
|
98
98
|
### 并行 v2 writer 与 Jenkins rollout gate
|
|
99
99
|
|
|
@@ -137,6 +137,30 @@ image intent,不持有 Flux Git credential,不运行 kubectl。DevOps server
|
|
|
137
137
|
执行 SCM CAS;未知结果只按原 request id GET,Observer 独立证明 Flux 运行态。旧 `pipeline build` 与
|
|
138
138
|
legacy writer 行为不变。
|
|
139
139
|
|
|
140
|
+
### Platform-build writer 结果对账
|
|
141
|
+
|
|
142
|
+
`platform-build` 可能出现一种特殊分裂状态:Jenkins 最终显示失败或 image intent 保持 `UNKNOWN`,但
|
|
143
|
+
Codeup/Flux 远端 CAS 实际已把目标分支推进到本次提交,Flux 也可能已经部署该镜像。此时 Git push/CAS
|
|
144
|
+
的原子性并未失效;不确定的是响应、readback 或平台本地结果持久化是否完成。
|
|
145
|
+
|
|
146
|
+
按下面顺序处理:
|
|
147
|
+
|
|
148
|
+
1. 保存原 request id、client request/idempotency key、build number 和完整日志;只运行
|
|
149
|
+
`pipeline platform-build resolve/status/log` 等原请求只读命令。
|
|
150
|
+
2. 由受支持的平台只读接口核验固定元组:application、service binding/target、source revision、image
|
|
151
|
+
repository/tag/digest、expected old head、稳定 request marker、远端 target HEAD/revision 和目标 image
|
|
152
|
+
字段。任何一项不一致都不能恢复为成功。
|
|
153
|
+
3. 单独读取 Flux GitRepository/Kustomization/HelmRelease/Deployment evidence。它只证明运行态是否消费了
|
|
154
|
+
exact revision/image,不改变 Jenkins 或平台账本终态。
|
|
155
|
+
4. 如果运行时健康而账本仍未决,报告 `RUNTIME_DEPLOYED / PLATFORM_LEDGER_UNRESOLVED`。禁止重新触发
|
|
156
|
+
build、换 key、生成第二个 image/commit、手工重复写 Flux、直改数据库或伪造 Jenkins `SUCCESS`。
|
|
157
|
+
5. 只有 runtime command catalog 明确提供、且服务端能以同一 durable request 做 exact reconciliation
|
|
158
|
+
的 reconcile/recover 能力,才允许把账本推进到 verified terminal state。当前 CLI 没有该命令时停止在
|
|
159
|
+
未决状态并交给控制面修复;不要用 local Flux fallback 代替账本恢复。
|
|
160
|
+
|
|
161
|
+
因此完成状态必须分开报告:`Jenkins/build`、`platform image-intent ledger`、`Flux/runtime`。三者一致才是
|
|
162
|
+
平台自动化闭环完成;只有后者健康时只能说运行态已部署。
|
|
163
|
+
|
|
140
164
|
若 migration plan 返回 `GITOPS_RAW_SECRET_FORBIDDEN`,这是 hard blocker,不是“按 recovery 处理”的泛化提示:
|
|
141
165
|
|
|
142
166
|
1. 不读取、复制或回显 Secret value,不把 raw value 改成普通 base64,不直接删除 Secret,也不绕过 migration/GitOps plan 手改目标。
|
|
@@ -157,6 +181,7 @@ legacy writer 行为不变。
|
|
|
157
181
|
- 普通 profile HTTPS 网关失败时,Repository/Jenkins run 按原 clientRequestId 查 `status`;standalone publication plan create 的 500/504、连接中断或无效 2xx 只按原 key 有界 GET `publication plan resolve`,校验 `STANDALONE`/repository identity,POST 只发一次,retryable 404 只稍后 GET。普通 session action 先 `app inspect`;publication attach 必须先按原 `sessionNo/clientRequestId` 执行 `app publication resolve`。其 retryable 404 只能稍后重查,禁止自动重放 attach;不要启动或遗留 port-forward/tunnel 旁路。
|
|
158
182
|
- session action 的自动恢复必须以写前 event cursor 为基线,只接受 cursor 之后与本次 planHash/精确 intent 匹配的新持久事件;既有 `WAITING_EXTERNAL` 或旧 observer/build/binding 字段不是本次写成功的证据。child run resolve 必须至少匹配请求 planNo,并校验响应中可用的 repository/workload identity。
|
|
159
183
|
- v3 bootstrap 是独立受认证 action;CLI 只提交原 session/Idempotency-Key,服务端锁定全部拓扑与固定三文件。PENDING 只读等待;初始 POST 未知只以原 key 精确重放,已持久 child UNKNOWN 才通过显式通用 `app retry <same-session>` 恢复原 run/key。普通 status/inspect 和 first-build recovery 都是纯读;不得重放 first-build POST、调用 legacy migration、手工写 SCM 或另建身份。retry 后仍 UNKNOWN 或 drift 时保持 fail closed。
|
|
184
|
+
- platform-build writer UNKNOWN 只按原 request 对账;远端 marker/HEAD 和 Flux healthy 是“原 CAS 可能已落地”的证据,不是重放授权,也不能单独把平台账本或 Jenkins 终态改成成功。缺少服务端 reconcile/recover capability 时明确保持 `PLATFORM_LEDGER_UNRESOLVED`。
|
|
160
185
|
- Jenkins scan 不等于 build;观察到意外 build 时停止父流程并报告。
|
|
161
186
|
- GitOps target 只有 topology validation 时保持 DRAFT;Jenkins attestation 最多推进 VERIFYING,只有独立 Flux Observer evidence 能推进 ACTIVE。
|
|
162
187
|
|
|
@@ -171,3 +196,4 @@ legacy writer 行为不变。
|
|
|
171
196
|
- Jenkins GitOps rollout automatic configure 达到 `READY/JENKINS_API_VERIFIED/VERIFIED`,observed shared-library revision、verified source revision、Jenkinsfile/configuration digest 均完整且与各自 intent 一致;source revision 不要求等于 approved library revision。仅旧部署可记录 manual compatibility evidence。
|
|
172
197
|
- GitOps service binding 和 exact Observer scope 存在;configRevision 与 observedRevision 一致后才 ACTIVE。
|
|
173
198
|
- 未经独立生产授权不得触发 build;触发后必须以 Jenkins 终态和 Flux/Observer evidence 验收。
|
|
199
|
+
- platform-build 还必须核验平台 image-intent ledger;Jenkins/build、ledger 与 Flux/runtime 未三方一致时,不得把运行态部署成功描述为完整平台发布成功。
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: numa-jenkins-deployment
|
|
3
|
+
description: 使用 Numa CLI 安全规划、执行、监控、诊断和恢复 MCI DevOps/Jenkins 的 v2 platform-build 或旧 v1 pipeline 部署。用户要求部署、发布、上线、重新部署、回滚,或排查 `pipeline platform-build`、`pipeline build/builds/status/log/retry/stop`、Jenkins 构建、GitOps image intent、结果未知、流水线无日志时必须使用。负责区分应用未入驻、Jenkins/branch 未初始化、v2 rollout 未就绪、项目规范失败、构建或运行失败、远端 Flux CAS 已落地但平台账本未决,以及控制面故障。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Numa Jenkins Deployment
|
|
7
|
+
|
|
8
|
+
把 Numa CLI 当作 Jenkins 和平台 GitOps writer 的唯一受控入口。先判定 delivery mode,再证明应用、源码、Job、binding、rollout、审批与运行态指向同一发布;不要用重复触发掩盖初始化或结果对账问题。
|
|
9
|
+
|
|
10
|
+
## 必读资源
|
|
11
|
+
|
|
12
|
+
- 每次执行完整读取 [references/cli-contract.md](references/cli-contract.md)。
|
|
13
|
+
- 每次部署或故障排查完整读取 [references/diagnostics.md](references/diagnostics.md)。
|
|
14
|
+
- 生产、多应用顺序发布或存在 `.numa/pipeline-release.json` 时完整读取 [references/release-policy.md](references/release-policy.md)。
|
|
15
|
+
|
|
16
|
+
## 工作边界
|
|
17
|
+
|
|
18
|
+
- 解释、review、状态查询或诊断保持只读;不触发、停止、重试或修改远程资源。
|
|
19
|
+
- 用户明确要求发布已解析的应用、tier 和 branch 后,可执行对应部署。新增目标、生产影响或 fallback 需要再次授权。
|
|
20
|
+
- 应用/Repository/Job 缺失时转入 `numa-create-application`;项目构建规范缺失且用户要求修复时使用 `mci-build-standards`。
|
|
21
|
+
- 不读取或输出 token cache、Bearer/Cookie、Jenkins/SCM credential、Kubernetes Secret 或数据库密码。
|
|
22
|
+
- v2 writer 结果未知时禁止直接改 Flux、数据库或 Jenkins 结果;本地 Flux 只是在正常流水线不可用且用户明确授权后的独立 fallback,不是账本修复器。
|
|
23
|
+
|
|
24
|
+
## 1. 建立运行时事实
|
|
25
|
+
|
|
26
|
+
1. 读取目标仓库的 `AGENTS.md`、部署文档和 `.numa/pipeline-release.json`。
|
|
27
|
+
2. 只用当前运行时帮助确定命令,不凭记忆猜参数:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
numa --version
|
|
31
|
+
numa commands --json
|
|
32
|
+
numa auth status --json
|
|
33
|
+
numa profile --json
|
|
34
|
+
numa pipeline --help
|
|
35
|
+
numa pipeline inspect APPLICATION --json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
3. 记录 CLI 版本、profile/API origin、当前用户、tier、application、branch 和完整 remote commit。401/403 按身份/权限处理,不绕过服务端。
|
|
39
|
+
4. 判定 delivery mode:存在已验证的 platform-build rollout、server-owned writer 和 `pipeline platform-build` capability 时为 `PLATFORM_V2`;明确的 legacy binding 才为 `LEGACY_V1`。证据不足时停止,禁止猜测或降级。
|
|
40
|
+
|
|
41
|
+
## 2. 写操作前预检
|
|
42
|
+
|
|
43
|
+
按顺序核验:
|
|
44
|
+
|
|
45
|
+
1. **应用目录**:`numa app list --json` 中存在唯一 application;否则分类为 `APPLICATION_NOT_REGISTERED`。
|
|
46
|
+
2. **Jenkins 初始化**:Job、instance、inventory、binding 和目标 branch child 均存在且可构建。完整 multibranch 初始化还要有 INDEX_ONLY/NoTrigger scan 证据;只存在父 Job 或 `scanMode=NONE` 不代表 branch 已就绪。当前服务端在 SCM 分支与 Jenkinsfile 已验证、但 branch child 缺失时,会为同一部署操作自动执行一次安全索引并继续;不得另建影子 Job 或退回默认分支。
|
|
47
|
+
3. **v2 rollout**:`PLATFORM_V2` 必须证明 writer bootstrap、Job provenance、platform-build rollout/configure 为 exact `READY/JENKINS_API_VERIFIED/VERIFIED`,source/Jenkinsfile/build-profile/configuration digest 完整。不得用 legacy manual readiness 代替。
|
|
48
|
+
4. **源码与项目**:工作树干净,HEAD 等于目标远端;Jenkinsfile/build profile 和运行时入口符合该 delivery mode。不要 stash、提交或丢弃用户的无关修改。
|
|
49
|
+
5. **治理**:生产发布需要真实 approval ID 或服务端允许的具体 production reason;不能捏造审批,也不能通过普通参数传入。
|
|
50
|
+
|
|
51
|
+
## 3. 展示发布计划
|
|
52
|
+
|
|
53
|
+
触发前展示 CLI/profile/操作者、delivery mode、application 顺序、repository/branch/SHA、Jenkins Job/binding/rollout、preflight、审批、稳定 idempotency key,以及会发生和不会发生的写操作。首次构建、生产发布和 fallback 都是独立授权。
|
|
54
|
+
|
|
55
|
+
幂等键应稳定标识同一应用、同一源码和同一发布 intent,例如 `APPLICATION-COMMIT_SHA`。同一提交的未知结果复用原 key;真正的新发布才使用新 key。
|
|
56
|
+
|
|
57
|
+
## 4. 执行与观察
|
|
58
|
+
|
|
59
|
+
### PLATFORM_V2
|
|
60
|
+
|
|
61
|
+
按运行时 help 组装命令;v2 不接受任意 Jenkins 参数:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
numa pipeline platform-build trigger APPLICATION \
|
|
65
|
+
--tier TIER \
|
|
66
|
+
--branch BRANCH \
|
|
67
|
+
--idempotency-key APPLICATION-COMMIT_SHA \
|
|
68
|
+
--approve-id APPROVAL_ID \
|
|
69
|
+
--production-reason '具体生产发布原因' \
|
|
70
|
+
--yes --wait --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
只传策略真实要求的审批字段。Jenkins 负责构建/push 镜像并提交一次 image intent;Flux SCM CAS 由 DevOps server-owned writer 执行,Jenkins 不持有 Flux Git credential。
|
|
74
|
+
|
|
75
|
+
### LEGACY_V1
|
|
76
|
+
|
|
77
|
+
只有明确 legacy binding 才使用:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
numa pipeline build APPLICATION \
|
|
81
|
+
--tier TIER \
|
|
82
|
+
--branch BRANCH \
|
|
83
|
+
--approve-id APPROVAL_ID \
|
|
84
|
+
--production-reason '具体生产发布原因' \
|
|
85
|
+
--idempotency-key APPLICATION-COMMIT_SHA \
|
|
86
|
+
--wait --json
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
多个应用严格串行;前一个只有平台终态和所需运行态验证均通过后才启动下一个。等待期间至少每分钟给用户一次状态。中断本地观察不会自动停止远端任务。
|
|
90
|
+
|
|
91
|
+
## 5. 未知结果与安全恢复
|
|
92
|
+
|
|
93
|
+
### Trigger/transport 未知
|
|
94
|
+
|
|
95
|
+
v2 trigger POST 只发一次:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
numa pipeline platform-build resolve --client-request-id APPLICATION-COMMIT_SHA --json
|
|
99
|
+
numa pipeline platform-build status REQUEST_ID --watch --json
|
|
100
|
+
numa pipeline platform-build log REQUEST_ID --start 0 --json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
legacy 通过原请求的 `builds/status/log` 找回。不要因 500/504、连接中断或本地等待取消而换 key 或直接 retry。
|
|
104
|
+
|
|
105
|
+
### GitOps writer/账本未知
|
|
106
|
+
|
|
107
|
+
Jenkins 可能在“更新环境镜像”阶段显示失败或 image intent 保持 `UNKNOWN`,但远端 Codeup CAS 和 Flux 部署实际已成功。此时分别核验:
|
|
108
|
+
|
|
109
|
+
- 原 platform request/build/log;
|
|
110
|
+
- exact application、binding/target、source revision、image repository/tag/digest、expected old head 和稳定 request marker;
|
|
111
|
+
- 远端 target HEAD/revision 与目标 image 字段;
|
|
112
|
+
- Flux GitRepository/Kustomization/HelmRelease/Deployment 的 exact observed revision/image。
|
|
113
|
+
|
|
114
|
+
远端 marker/HEAD 和健康运行态证明原 CAS 可能已经落地,不授权重放 build、生成新 key、手工重写 Flux、直改数据库或伪造 Jenkins `SUCCESS`。只有 runtime command catalog 明确提供、且服务端能对同一 durable request 做 exact reconciliation 的 reconcile/recover 能力才可推进账本。当前没有该能力时报告 `RUNTIME_DEPLOYED / PLATFORM_LEDGER_UNRESOLVED` 并停止。
|
|
115
|
+
|
|
116
|
+
## 6. 失败分类
|
|
117
|
+
|
|
118
|
+
只选择有证据的一类,并列出已排除项:
|
|
119
|
+
|
|
120
|
+
1. `APPLICATION_NOT_REGISTERED`:应用目录缺失。
|
|
121
|
+
2. `JENKINS_NOT_INITIALIZED`:instance/inventory/Job/scan/branch/binding 缺失。
|
|
122
|
+
3. `PLATFORM_V2_NOT_READY`:writer bootstrap、provenance 或 rollout/configure 未达到 exact verified readiness。
|
|
123
|
+
4. `PROJECT_STANDARD`:Jenkinsfile、build profile、产物或启动契约不合规。
|
|
124
|
+
5. `AUTHORIZATION_OR_APPROVAL`:登录、角色或生产审批不足。
|
|
125
|
+
6. `BUILD_OR_RUNTIME_FAILURE`:编译、测试、镜像、迁移、探针或启动失败。
|
|
126
|
+
7. `GITOPS_LEDGER_UNRESOLVED`:远端/运行态可能成功,但 writer response/readback/平台持久化未确认。
|
|
127
|
+
8. `CONTROL_PLANE_OUTAGE`:DevOps API 路由或后端不可用,无法读取正常控制面状态。
|
|
128
|
+
|
|
129
|
+
日志从第一个根因和最终 `Finished:` 共同判断,不只看最后一层包装异常。
|
|
130
|
+
|
|
131
|
+
## 7. 运行态与完成标准
|
|
132
|
+
|
|
133
|
+
v2 完成状态分三列报告:
|
|
134
|
+
|
|
135
|
+
| 维度 | 必要证据 |
|
|
136
|
+
|---|---|
|
|
137
|
+
| Jenkins/build | 同一 request/build 的明确终态与源码/image identity |
|
|
138
|
+
| Platform ledger | 同一 image intent/CAS 的 verified terminal result |
|
|
139
|
+
| Flux/runtime | exact Git revision、controller healthy、workload exact image 与 readiness |
|
|
140
|
+
|
|
141
|
+
只有三者一致,且仓库定义的健康/迁移/能力探针通过,才报告平台自动化部署成功。Flux/Deployment 健康但账本未决时只能报告运行态部署成功;“构建已触发”“镜像已推送”或“Flux 已同步”都不能单独冒充完整发布成功。
|
|
142
|
+
|
|
143
|
+
最终报告先给结论,再列 application、mode、branch/SHA、request/build、幂等键、三维状态、运行态验证、未决风险和安全恢复入口。
|
|
144
|
+
|
|
145
|
+
## 8. 控制平面自部署与 break-glass
|
|
146
|
+
|
|
147
|
+
若目标就是提供 Numa pipeline API 的 DevOps 平台且控制面已宕机,停止 CLI 重试并说明自举死锁。只有用户明确授权且已有受控规程时,才用白名单 Jenkins UI/恢复服务固定 branch/commit、审批和审计恢复后端;恢复后立即回到 Numa CLI 校正原请求并验证运行态。手工构建可能不会进入平台账本,必须如实报告。
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Numa Jenkins 发布"
|
|
3
|
+
short_description: "安全执行 v2 platform-build 与 legacy Jenkins 发布"
|
|
4
|
+
default_prompt: "使用 $numa-jenkins-deployment 判定目标应用的 PLATFORM_V2 或 LEGACY_V1 delivery mode,完成预检、受治理触发、状态与日志恢复,并分别核验 Jenkins/build、platform image-intent ledger 和 Flux/runtime。结果未知时只恢复原请求,不重放写操作。"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "numa-jenkins-deployment",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "请制定一个通过 Numa CLI 发布订单系统的执行方案,不要实际触发。order-api 和 order-web 都已确认是 PLATFORM_V2,rollout 为 READY/JENKINS_API_VERIFIED/VERIFIED;仓库 develop 分支 HEAD 与 origin/develop 都是 4f7d9b1,工作树干净;.numa/pipeline-release.json 要求 production,顺序为 order-api 后 order-web,approvalId 为 ORDER-STANDARD-RELEASE,preflight 是 ./scripts/verify-cli-deploy.sh。请给出预检、只读解析、准确构建命令、幂等键、失败恢复和完成条件。",
|
|
7
|
+
"expected_output": "输出严格串行、可审计且幂等的 Numa CLI生产发布方案,不绕过仓库策略。",
|
|
8
|
+
"files": [],
|
|
9
|
+
"expectations": [
|
|
10
|
+
"先验证 CLI/auth/profile、Git HEAD 与远端、仓库 preflight、应用和 Jenkins binding,再给出写命令",
|
|
11
|
+
"使用 order-api-4f7d9b1 和 order-web-4f7d9b1 作为每应用稳定幂等键",
|
|
12
|
+
"生产命令使用 pipeline platform-build trigger、--approve-id ORDER-STANDARD-RELEASE、--yes、--wait 和 --json,且没有任意 --param",
|
|
13
|
+
"明确 order-api 只有 build、platform ledger、Flux/runtime 三方完成后才允许触发 order-web",
|
|
14
|
+
"网络或轮询结果不明时按原 key 使用 platform-build resolve/status/log"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"prompt": "帮我判断下面三个项目为什么不能用 Jenkins 部署,只诊断不要修改或触发:A 的 numa app list 查不到 application;B 的 application 已存在,但 pipeline inspect 没有 confirmed binding,Jenkins instance inventory 从未同步;C 的 binding confirmed/instance healthy,构建日志显示 Jenkinsfile 没有 buildEntry()、Next.js 容器也没有可运行的 standalone server.js。请分别给出根因分类、证据、责任边界和下一步。",
|
|
20
|
+
"expected_output": "准确区分应用未登记、Jenkins 未初始化和项目不符合构建/运行规范,并路由到正确专项能力。",
|
|
21
|
+
"files": [],
|
|
22
|
+
"expectations": [
|
|
23
|
+
"A 被分类为 APPLICATION_NOT_REGISTERED,并建议使用 numa-create-application/onboarding,而不是直接建 Jenkins Job",
|
|
24
|
+
"B 被分类为 JENKINS_NOT_INITIALIZED,指出 inventory、Job/binding 确认责任属于平台初始化",
|
|
25
|
+
"C 被分类为 PROJECT_STANDARD 或构建运行规范问题,并建议使用 mci-build-standards",
|
|
26
|
+
"没有触发 build、retry、stop,也没有擅自修改项目",
|
|
27
|
+
"明确列出已排除类别和每个项目的最小下一步"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": 3,
|
|
32
|
+
"prompt": "正在用 numa pipeline 部署 mci-devops-platform 自己。后端构建后,numa pipeline list/builds/log 全部返回 404 或 503,但登录后的 Jenkins 网页仍能看到 build #50 日志,日志末尾是 Spring ApplicationContext 启动失败和 Finished: FAILURE。前端还没部署。请判断原因并给安全恢复方案;不要假设能继续调用已经宕机的 DevOps API。",
|
|
33
|
+
"expected_output": "识别控制平面自部署死锁,停止 CLI 重试,提出受控 break-glass 后端恢复及恢复后回归 Numa CLI 的顺序。",
|
|
34
|
+
"files": [],
|
|
35
|
+
"expectations": [
|
|
36
|
+
"分类为 CONTROL_PLANE_OUTAGE 与后端运行时失败叠加,而不是 Numa 日志命令缺失",
|
|
37
|
+
"解释 Jenkins 网页直连而 Numa log 依赖 DevOps 后端代理",
|
|
38
|
+
"停止重复 build/retry,并明确前端不得在后端恢复前触发",
|
|
39
|
+
"break-glass 要求白名单 Job、固定 branch/commit、审批、SSO/MFA 或既有受控权限和审计",
|
|
40
|
+
"后端恢复后切回 Numa CLI校正旧状态、验证运行态,再部署前端,并说明手工构建可能不会回填 request 表"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": 4,
|
|
45
|
+
"prompt": "active-code-inbox 已确认使用 PLATFORM_V2,rollout 为 READY/JENKINS_API_VERIFIED/VERIFIED。请给出生产触发和未知结果恢复命令;不得传任意 Jenkins 参数。",
|
|
46
|
+
"expected_output": "使用 platform-build trigger,并且未知 trigger 只按原 client request id resolve/status/log,不回退 legacy pipeline build。",
|
|
47
|
+
"files": [],
|
|
48
|
+
"expectations": [
|
|
49
|
+
"触发使用 numa pipeline platform-build trigger,包含稳定 idempotency key、生产审批和 --yes --wait --json",
|
|
50
|
+
"明确 v2 不接受 --param,也不回退 numa pipeline build",
|
|
51
|
+
"未知结果使用同一 key 的 platform-build resolve,再按同一 request status/log",
|
|
52
|
+
"说明 Jenkins 只构建镜像并提交一次 intent,Flux CAS 由 server-owned writer 执行"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": 5,
|
|
57
|
+
"prompt": "某 v2 构建在 Update Environment Image 阶段以 GitOpsUnknownResult 失败,但远端 prd HEAD 含本次 request marker,目标 values 的 image tag/digest 与 intent 一致,Flux 和 Deployment 也已应用且健康;平台 image-intent 仍 UNKNOWN。是否应该重跑构建或本地再推一次 Flux?如何报告状态?",
|
|
58
|
+
"expected_output": "识别远端 CAS 已落地但平台账本未决,不重放任何写操作;分别报告 runtime 与 ledger,并等待同一 durable request 的服务端 exact reconciliation。",
|
|
59
|
+
"files": [],
|
|
60
|
+
"expectations": [
|
|
61
|
+
"不重跑 build、不换 idempotency key、不创建第二个 image/commit、不手工再写 Flux",
|
|
62
|
+
"解释 Git CAS 可原子成功,但 response/readback/平台持久化仍可能未知",
|
|
63
|
+
"要求匹配 application、binding/target、request/build、source、image、expected old head、marker 和 remote HEAD/file content",
|
|
64
|
+
"报告 RUNTIME_DEPLOYED / PLATFORM_LEDGER_UNRESOLVED,而不是完整平台发布成功",
|
|
65
|
+
"只有服务端对同一 durable request 的受支持 reconcile/recover 能推进账本;命令不存在时停止而不是发明命令"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Numa Pipeline CLI 调用契约
|
|
2
|
+
|
|
3
|
+
## 1. 固定 CLI、身份与 profile
|
|
4
|
+
|
|
5
|
+
优先使用 PATH 中的 `numa`,并在一次发布中固定同一入口:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
numa --version
|
|
9
|
+
numa commands --json
|
|
10
|
+
numa auth status --json
|
|
11
|
+
numa profile --json
|
|
12
|
+
numa pipeline --help
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
缺少命令时可以只读检查公开最新版,但切换前要告知用户,且发现和写操作必须使用同一已验证版本:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx -y --prefer-online --registry=https://registry.npmjs.org/ \
|
|
19
|
+
@numa-tech/numa@latest --version
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
不要硬编码本地源码的 `dist/cli.js` 作为通用方案。401/403 不得通过裸 API、token cache 或手工 Bearer 绕过。
|
|
23
|
+
|
|
24
|
+
## 2. 判定 delivery mode
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
numa app list --json
|
|
28
|
+
numa pipeline inspect APPLICATION --json
|
|
29
|
+
numa pipeline list --app APPLICATION --tier TIER --branch BRANCH --json
|
|
30
|
+
numa pipeline platform-build --help
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`PLATFORM_V2` 必须同时有运行时 platform-build capability、verified platform-build rollout/server-owned writer、confirmed binding 和可构建 branch。明确 legacy binding 才进入 `LEGACY_V1`。命令存在但服务端 capability/rollout 未就绪不能冒充 v2 ready,也不能静默回退 v1。
|
|
34
|
+
|
|
35
|
+
Multibranch 父 Job 的 `buildable=false` 可能正常;必须解析目标 branch child。完整初始化需要 INDEX_ONLY/NoTrigger scan 的 task/result 与“没有触发 build”证据,只建父 Job 或 `scanMode=NONE` 不足。
|
|
36
|
+
|
|
37
|
+
## 3. PLATFORM_V2 构建
|
|
38
|
+
|
|
39
|
+
运行时帮助:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
numa pipeline platform-build trigger --help
|
|
43
|
+
numa pipeline platform-build resolve --help
|
|
44
|
+
numa pipeline platform-build status --help
|
|
45
|
+
numa pipeline platform-build log --help
|
|
46
|
+
numa pipeline platform-build stop --help
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
生产示例:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
numa pipeline platform-build trigger APPLICATION \
|
|
53
|
+
--tier production \
|
|
54
|
+
--branch BRANCH \
|
|
55
|
+
--idempotency-key APPLICATION-COMMIT_SHA \
|
|
56
|
+
--approve-id APPROVAL_ID \
|
|
57
|
+
--production-reason '具体生产发布原因' \
|
|
58
|
+
--yes --wait --json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
规则:
|
|
62
|
+
|
|
63
|
+
- v2 不接受任意 `--param`;审批只留平台审计,不进入 Jenkins 环境。
|
|
64
|
+
- idempotency key 是稳定 client request id;未知结果复用原 key,新发布才用新 key。
|
|
65
|
+
- Jenkins 只构建/push 镜像并提交一次 image intent;DevOps server-owned writer 执行 Flux SCM CAS。
|
|
66
|
+
- `--wait` 只观察原 request,终端中断不停止远端任务。
|
|
67
|
+
|
|
68
|
+
## 4. PLATFORM_V2 找回、状态与日志
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
numa pipeline platform-build resolve \
|
|
72
|
+
--client-request-id APPLICATION-COMMIT_SHA --json
|
|
73
|
+
numa pipeline platform-build list \
|
|
74
|
+
--app APPLICATION --tier production --json
|
|
75
|
+
numa pipeline platform-build status REQUEST_ID --watch --json
|
|
76
|
+
numa pipeline platform-build log REQUEST_ID --start 0 --json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Trigger POST 只发一次。500/504、连接断开、无效响应或本地等待取消后只用原 key/request GET。不要用第二个 trigger 或新 key探测结果。
|
|
80
|
+
|
|
81
|
+
Stop 是独立写操作,必须由用户明确要求并遵循生产治理;响应未知后只读取同一 request,不重放 stop。
|
|
82
|
+
|
|
83
|
+
## 5. GitOps writer 未决契约
|
|
84
|
+
|
|
85
|
+
若 Jenkins 最终失败发生在 image update/writer 阶段,或 image intent 为 `UNKNOWN`,先保存原 request/build/log。支持的 server reconciliation 必须精确匹配:
|
|
86
|
+
|
|
87
|
+
- application、service binding/target;
|
|
88
|
+
- client request/idempotency key、request ID、build number;
|
|
89
|
+
- source revision;
|
|
90
|
+
- image repository、tag、digest;
|
|
91
|
+
- expected old target head 和稳定 request marker;
|
|
92
|
+
- remote target HEAD/revision 与目标文件 image 字段。
|
|
93
|
+
|
|
94
|
+
Flux GitRepository/Kustomization/HelmRelease/Deployment 只能证明 exact revision/image 的运行态。远端 CAS 和运行时已经成功时,不重放 build、不换 key、不创建第二个 image/commit、不手工写 Flux、不直改数据库或 Jenkins 结果。
|
|
95
|
+
|
|
96
|
+
只有运行时 command catalog 明确提供的服务端 reconcile/recover,且它恢复同一 durable request,才可推进平台账本。当前 CLI 没有该命令时输出 `RUNTIME_DEPLOYED / PLATFORM_LEDGER_UNRESOLVED`,等待控制面能力;不要发明命令或使用 local Flux fallback 代替。
|
|
97
|
+
|
|
98
|
+
## 6. LEGACY_V1 兼容命令
|
|
99
|
+
|
|
100
|
+
仅用于明确 legacy binding:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
numa pipeline build APPLICATION \
|
|
104
|
+
--tier production \
|
|
105
|
+
--branch BRANCH \
|
|
106
|
+
--approve-id APPROVAL_ID \
|
|
107
|
+
--production-reason '具体生产发布原因' \
|
|
108
|
+
--idempotency-key APPLICATION-COMMIT_SHA \
|
|
109
|
+
--wait --json
|
|
110
|
+
|
|
111
|
+
numa pipeline builds --app APPLICATION --tier production --branch BRANCH --limit 20 --json
|
|
112
|
+
numa pipeline status REQUEST_OR_BUILD_ID --watch --json
|
|
113
|
+
numa pipeline log REQUEST_OR_BUILD_ID --follow
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Legacy `retry` 创建新请求,只用于已知终态失败后的有意重试,并需要当前有效审批;它不用于未知结果恢复。`stop` 是破坏性操作,必须有用户明确授权。
|
|
117
|
+
|
|
118
|
+
## 7. 安全输出
|
|
119
|
+
|
|
120
|
+
最终仅保留 CLI version、profile/API origin、application、delivery mode、tier、branch/SHA、request/build ID、idempotency key、状态、Flux observed revision/image 和脱敏 request ID。不要输出 token、Cookie、Authorization、Jenkins/SCM credential、Secret 或包含密码的参数。
|