diff --git a/README.md b/README.md index cdb671e..f7de6cc 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ - 生成改动文档同步计划:按变更文件自动提示需要同步的 README、API、AGENTS、docs、Obsidian、skill 和 ktWorkflow 入口;MCP 不可用时用 `pnpm run change-doc-sync -- --project ` 作为 CLI fallback。 - 生成多仓库提交/推送计划:按仓库分组、建议提交信息、列出提交和推送前检查。 - 生成远程只读健康检查和数据库同步安全向导:覆盖飞牛 NAS 服务探测、GTID、`.kt-workspace/db-sync` 转储、备份库和行数校验。 -- 生成或执行部署观测:把 Jenkins build、`build.xml` SCM revision/result、日志尾部、K8s Deployment、Pod、`/health/runtime` 和任务 smoke 汇总成 `.kt-workspace/test-artifacts/deploy-observation` 下的运行态证据;Jenkins 状态优先取日志尾部最终 `Finished:`,没有最终行时回退到 `build.xml` 的最终 result,result 为空才视为未完成。 +- 生成或执行部署观测:把 Jenkins build、`build.xml` SCM revision/top-level result、日志尾部、K8s Deployment、Pod、`/health/runtime` 和任务 smoke 汇总成 `.kt-workspace/test-artifacts/deploy-observation` 下的运行态证据;Jenkins 状态优先取日志尾部最终 `Finished:`,没有最终行时回退到 `build.xml` 的顶层 result,result 为空才视为未完成。 - 生成专项组件工作流:KtTable、BlogArgon、AdminAuth、QQBot、FF14Plugin、NapCatLogin、SystemLog、Knife4jSwagger、FnosK8s 的防踩坑清单和验证点。 - 生成验证进程清理计划:按项目路径和端口给出 PowerShell 检查命令,不直接杀进程。 - 清理历史产物:统一治理 `.kt-workspace` 下的测试/验证产物,按目录最近修改时间只保留最近 3 轮,模板目录永久保留;CLI 默认 dry-run,真实清理必须显式传 `--execute`。 diff --git a/src/selfTest.ts b/src/selfTest.ts index a97f322..349a7d7 100644 --- a/src/selfTest.ts +++ b/src/selfTest.ts @@ -1946,6 +1946,7 @@ export async function runSelfTest(): Promise { 'rm -f "$KUBECONFIG_TEMP"', 'kubectl --kubeconfig "$KUBECONFIG_ACTIVE"', "section jenkins_build_xml", + "s#^ \\([^<]*\\)[[:space:]]*\\$#\\1#p", ]) { if (!deployObservationCommandText.includes(expected)) { throw new Error(`deploy observation kubeconfig self-check failed: ${expected}`); diff --git a/src/tools/deployObservation.ts b/src/tools/deployObservation.ts index 374f5f4..bb35ebd 100644 --- a/src/tools/deployObservation.ts +++ b/src/tools/deployObservation.ts @@ -330,7 +330,7 @@ function buildRemoteScript(input: NormalizedInput): string { 'section jenkins_meta', 'printf "jobName=%s\\n" "$JOB_NAME"', 'printf "buildNumber=%s\\n" "$BUILD_NUMBER"', - 'if [ -f "$BUILD_DIR/build.xml" ]; then RESULT="$(grep -Eo "[^<]*" "$BUILD_DIR/build.xml" 2>/dev/null | sed -E "s###g" | tail -1 || true)"; else RESULT=""; fi', + 'if [ -f "$BUILD_DIR/build.xml" ]; then RESULT="$(sed -n "s#^ \\([^<]*\\)[[:space:]]*\\$#\\1#p" "$BUILD_DIR/build.xml" 2>/dev/null | head -n 1 || true)"; else RESULT=""; fi', 'printf "result=%s\\n" "$RESULT"', 'section jenkins_build_xml', 'if [ -f "$BUILD_DIR/build.xml" ]; then grep -E "<(hash|sha1)>[0-9a-fA-F]{7,40}" "$BUILD_DIR/build.xml" 2>/dev/null | head -n 20 || true; else echo "jenkins build.xml not found: $BUILD_DIR/build.xml"; fi',