fix: 精准读取Jenkins顶层构建结果

This commit is contained in:
sunlei 2026-07-04 10:43:26 +08:00
parent 223a4d1d62
commit f5dbf31f82
3 changed files with 3 additions and 2 deletions

View File

@ -21,7 +21,7 @@
- 生成改动文档同步计划:按变更文件自动提示需要同步的 README、API、AGENTS、docs、Obsidian、skill 和 ktWorkflow 入口MCP 不可用时用 `pnpm run change-doc-sync -- --project <project>` 作为 CLI fallback。 - 生成改动文档同步计划:按变更文件自动提示需要同步的 README、API、AGENTS、docs、Obsidian、skill 和 ktWorkflow 入口MCP 不可用时用 `pnpm run change-doc-sync -- --project <project>` 作为 CLI fallback。
- 生成多仓库提交/推送计划:按仓库分组、建议提交信息、列出提交和推送前检查。 - 生成多仓库提交/推送计划:按仓库分组、建议提交信息、列出提交和推送前检查。
- 生成远程只读健康检查和数据库同步安全向导:覆盖飞牛 NAS 服务探测、GTID、`.kt-workspace/db-sync` 转储、备份库和行数校验。 - 生成远程只读健康检查和数据库同步安全向导:覆盖飞牛 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`最终 resultresult 为空才视为未完成。 - 生成或执行部署观测:把 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`顶层 resultresult 为空才视为未完成。
- 生成专项组件工作流KtTable、BlogArgon、AdminAuth、QQBot、FF14Plugin、NapCatLogin、SystemLog、Knife4jSwagger、FnosK8s 的防踩坑清单和验证点。 - 生成专项组件工作流KtTable、BlogArgon、AdminAuth、QQBot、FF14Plugin、NapCatLogin、SystemLog、Knife4jSwagger、FnosK8s 的防踩坑清单和验证点。
- 生成验证进程清理计划:按项目路径和端口给出 PowerShell 检查命令,不直接杀进程。 - 生成验证进程清理计划:按项目路径和端口给出 PowerShell 检查命令,不直接杀进程。
- 清理历史产物:统一治理 `.kt-workspace` 下的测试/验证产物,按目录最近修改时间只保留最近 3 轮模板目录永久保留CLI 默认 dry-run真实清理必须显式传 `--execute` - 清理历史产物:统一治理 `.kt-workspace` 下的测试/验证产物,按目录最近修改时间只保留最近 3 轮模板目录永久保留CLI 默认 dry-run真实清理必须显式传 `--execute`

View File

@ -1946,6 +1946,7 @@ export async function runSelfTest(): Promise<void> {
'rm -f "$KUBECONFIG_TEMP"', 'rm -f "$KUBECONFIG_TEMP"',
'kubectl --kubeconfig "$KUBECONFIG_ACTIVE"', 'kubectl --kubeconfig "$KUBECONFIG_ACTIVE"',
"section jenkins_build_xml", "section jenkins_build_xml",
"s#^ <result>\\([^<]*\\)</result>[[:space:]]*\\$#\\1#p",
]) { ]) {
if (!deployObservationCommandText.includes(expected)) { if (!deployObservationCommandText.includes(expected)) {
throw new Error(`deploy observation kubeconfig self-check failed: ${expected}`); throw new Error(`deploy observation kubeconfig self-check failed: ${expected}`);

View File

@ -330,7 +330,7 @@ function buildRemoteScript(input: NormalizedInput): string {
'section jenkins_meta', 'section jenkins_meta',
'printf "jobName=%s\\n" "$JOB_NAME"', 'printf "jobName=%s\\n" "$JOB_NAME"',
'printf "buildNumber=%s\\n" "$BUILD_NUMBER"', 'printf "buildNumber=%s\\n" "$BUILD_NUMBER"',
'if [ -f "$BUILD_DIR/build.xml" ]; then RESULT="$(grep -Eo "<result>[^<]*</result>" "$BUILD_DIR/build.xml" 2>/dev/null | sed -E "s#</?result>##g" | tail -1 || true)"; else RESULT=""; fi', 'if [ -f "$BUILD_DIR/build.xml" ]; then RESULT="$(sed -n "s#^ <result>\\([^<]*\\)</result>[[:space:]]*\\$#\\1#p" "$BUILD_DIR/build.xml" 2>/dev/null | head -n 1 || true)"; else RESULT=""; fi',
'printf "result=%s\\n" "$RESULT"', 'printf "result=%s\\n" "$RESULT"',
'section jenkins_build_xml', 'section jenkins_build_xml',
'if [ -f "$BUILD_DIR/build.xml" ]; then grep -E "<(hash|sha1)>[0-9a-fA-F]{7,40}</(hash|sha1)>" "$BUILD_DIR/build.xml" 2>/dev/null | head -n 20 || true; else echo "jenkins build.xml not found: $BUILD_DIR/build.xml"; fi', 'if [ -f "$BUILD_DIR/build.xml" ]; then grep -E "<(hash|sha1)>[0-9a-fA-F]{7,40}</(hash|sha1)>" "$BUILD_DIR/build.xml" 2>/dev/null | head -n 20 || true; else echo "jenkins build.xml not found: $BUILD_DIR/build.xml"; fi',