From d354e5e7c3c7e19c09180b87c7df305a056a06ed Mon Sep 17 00:00:00 2001 From: suzmii Date: Sun, 20 Sep 2026 22:58:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=91=E5=8F=B7Job?= =?UTF-8?q?=E6=9C=AA=E6=8E=88=E6=9D=83=E8=B0=83=E5=BA=A6=E5=99=A8=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=BD=92=E6=A1=A3=E5=AF=BC=E8=87=B4=E6=95=B4=E8=BD=AE?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发号Jenkinsfile显式copyArtifactPermission授权调度管线 生产门禁新增该授权规则避免回归 运维文档补充生产者到调度器的Copy Artifact映射与失败后果 --- docs/【开发运维】本地开发验证与生产运维-2026-05-15.md | 2 +- jenkins/Jenkinsfile.agc-global-version-issue | 7 +++++++ scripts/check-production-ops-guardrails.mjs | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md b/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md index dfb57b87c..f8af79922 100644 --- a/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md +++ b/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md @@ -698,7 +698,7 @@ cat /var/lib/genarrative/health-patrol/status.json 如需接外部告警,可在 `/etc/genarrative/health-patrol.env` 配置 `GENARRATIVE_HEALTH_PATROL_WEBHOOK_URL`;脚本只会在 `WARNING` 或 `CRITICAL` 时向该 webhook 发送 JSON。未配置 webhook 时,告警来源是 systemd 失败状态、journal 和状态文件。 -Jenkins Copy Artifact 必须保持 `Production` 权限模式;产物生产者要在 Jenkinsfile 中用 `copyArtifactPermission` 精确授权消费者,不能依赖 Migration 模式或全局 `Job/Read`。固定映射为 `Genarrative-Stdb-Module-Build` → `Genarrative-Stdb-Module-Publish`、`Genarrative-Api-Build` → `Genarrative-Api-Deploy`、`Genarrative-Web-Build` → `Genarrative-Web-Deploy`、`Genarrative-Database-Export` → `Genarrative-Database-Import`。如果 `copyArtifacts` 报 `Unable to find project for artifact copy`,但来源 Job、指定构建号和归档都实际存在,先检查来源 Job 的 `CopyArtifactPermissionProperty`;修复 Jenkinsfile 后必须先运行一次产物生产者,让 Declarative Pipeline 把 Job property 写回 Jenkins,再重跑 Deploy / Publish / Import。`npm run check:production-ops` 会防止四条白名单再次丢失。 +Jenkins Copy Artifact 必须保持 `Production` 权限模式;产物生产者要在 Jenkinsfile 中用 `copyArtifactPermission` 精确授权消费者,不能依赖 Migration 模式或全局 `Job/Read`。固定映射为 `Genarrative-Stdb-Module-Build` → `Genarrative-Stdb-Module-Publish`、`Genarrative-Api-Build` → `Genarrative-Api-Deploy`、`Genarrative-Web-Build` → `Genarrative-Web-Deploy`、`Genarrative-Database-Export` → `Genarrative-Database-Import`、`Genarrative-Agc-Global-Version-Issue` → `Genarrative-Scheduled-Revision-Trigger`(发号 Job 必须授权调度器读 `agc-global-version.txt`;缺这条会让整轮调度在发号之后失败——号已烧、渠道构建没被触发,2026-09-20 #103 即为此)。如果 `copyArtifacts` 报 `Unable to find project for artifact copy`,但来源 Job、指定构建号和归档都实际存在,先检查来源 Job 的 `CopyArtifactPermissionProperty`;修复 Jenkinsfile 后必须先运行一次产物生产者,让 Declarative Pipeline 把 Job property 写回 Jenkins,再重跑 Deploy / Publish / Import。`npm run check:production-ops` 会防止四条白名单再次丢失。 `Genarrative-Web-Build` 的主站构建失败若出现 Rollup 报错 `"xxx" is not exported by "src/services/publicWorkCode.ts"`,优先按前端公开作品号工具缺失处理,而不是排查 Jenkins 节点环境。修复时要让 `publicWorkCode.ts` 的 `buildPublicWorkCode` 与 `isSamePublicWorkCode` 成对导出,并补 `src/services/publicWorkCode.test.ts` 覆盖对应玩法前缀;随后用 `npm run build:production-release -- --component web --name <临时名>` 复现 Jenkins web 构建路径。 diff --git a/jenkins/Jenkinsfile.agc-global-version-issue b/jenkins/Jenkinsfile.agc-global-version-issue index 62b43f220..b36fa6d19 100644 --- a/jenkins/Jenkinsfile.agc-global-version-issue +++ b/jenkins/Jenkinsfile.agc-global-version-issue @@ -15,6 +15,13 @@ pipeline { disableConcurrentBuilds() skipDefaultCheckout(true) buildDiscarder(logRotator(numToKeepStr: '100', artifactNumToKeepStr: '20')) + // Copy Artifact 保持 Production 权限模式:生产者必须显式授权消费者。 + // 调度管线要 copy 本 Job 的 agc-global-version.txt 才能把总号透传给渠道构建; + // 缺这条授权时 copyArtifacts 会报「Unable to find project for artifact copy」, + // 整轮调度失败,且失败点在发号之后 —— 号已烧、Windows 也没被触发 + // (2026-09-20 首次统一发号 #103 即命中)。改完本文件后必须先单独跑一次本 Job, + // 让 Declarative Pipeline 把 Job property 写回 Jenkins,再重跑调度。 + copyArtifactPermission('Genarrative-Scheduled-Revision-Trigger') } environment { diff --git a/scripts/check-production-ops-guardrails.mjs b/scripts/check-production-ops-guardrails.mjs index 4c2fe6f44..442768df5 100644 --- a/scripts/check-production-ops-guardrails.mjs +++ b/scripts/check-production-ops-guardrails.mjs @@ -42,6 +42,13 @@ const checks = [ reason: 'Copy Artifact Production 模式下,API Build 必须显式授权 API Deploy 读取归档。', }, + { + file: 'jenkins/Jenkinsfile.agc-global-version-issue', + includes: + "copyArtifactPermission('Genarrative-Scheduled-Revision-Trigger')", + reason: + 'Copy Artifact Production 模式下,AGC 发号 Job 必须显式授权调度管线读取 agc-global-version.txt,否则整轮调度会在 copyArtifacts 处失败。', + }, { file: 'jenkins/Jenkinsfile.production-stdb-module-build', includes: 'npm run check:rustfmt',