chore(infra): Gitea+Jenkins CI/CD 部署与凭据整改(仅入库,不执行) #27

Merged
zhangxiang merged 1 commits from chore/cicd-gitea-jenkins into dev 2026-09-20 11:50:54 +08:00
Owner

变更摘要

把自托管 CI/CD(Gitea + Jenkins)的部署编排与凭据整改refactor/optimize-ui 中摘出,单独成为可评审单元。
15 个文件、+2092 行、全部为新增git show --name-status 全为 A,不改动任何既有源码、构建配置或站点运行时)。

  • infra/cicd/:docker-compose(gitea / jenkins)、JCasC、插件清单、备份/恢复、健康检查、容器日志截断、凭据轮换、git 历史清除脚本
  • docs/deployment/cicd/:安装手册、高可用/备份/监控、凭据事故复盘
  • infra/cicd/.env.example 仅为占位模板;真实 .env.gitignore 排除

拆出理由:凭据相关变更不应搭在 27 个 UI/文案提交的 PR 里被一并放行。

关联 Issue

关闭:N/A —— 源自 2026-09 凭据事故复盘(docs/deployment/cicd/03-credential-incident.md),无对应 Issue。

全链路检查

  • npm run type-check:N/A —— 本 PR 不含 TS/TSX 文件,未触及类型面
  • npm run lint:N/A —— 无 JS/TS 源码改动,eslint 作用域内文件集不变
  • 路由/链接真实:N/A —— 不新增页面或 Link
  • CMS 内容模型:N/A —— 未触及 content-types.ts 与 seed
  • 视觉/交互:N/A —— 无站点运行时改动;编排仅在自托管服务器生效
  • 暗黑模式 token:N/A —— 无 CSS/组件改动
  • 动效与品牌红约束:N/A —— 无 UI 改动
  • 数字口径 basis:N/A —— 无面向用户的文案或指标
  • 无遗留 console.log / TODO / FIXME / .only():脚本为 bash,使用 echo/日志前缀输出,符合脚本惯例

测试分层检查(L0–L3)

  • L0 单元:N/A —— 无 TS/Rust 函数新增;shell 脚本按仓库既有约定不经 jest 覆盖
  • L1 组件:N/A —— 无 React 组件改动
  • L2 E2E:N/A —— 不影响站点页面行为
  • L3 视觉回归:N/A —— 无 UI 输出变化
  • 机械守卫正控制:N/A —— 本 PR 不新增守卫测试
  • 已运行相关验证(真实执行,非推定):
    • bash -n 6/6 通过:backup-cicd.sh restore-cicd.sh healthcheck-cicd.sh truncate-container-logs.sh purge-git-history.sh rotate-credentials.sh
    • js-yaml 解析 3/3 通过:docker-compose.gitea.yml docker-compose.jenkins.yml jenkins/casc.yaml
    • casc.yaml 凭据扫描:5 处 ${ENV} 注入、0 行疑似硬编码密钥

质量门禁

  • npm run test:unit:N/A —— 无源码改动;基线 1594/132 已在同源提交上验证
  • npm run test:coverage:N/A —— 未触及覆盖率口径,未下调任何阈值
  • npm run test(Playwright):N/A —— 不改变浏览器可见行为
  • check:contrast / check:headings:N/A —— 无样式与标题层级改动
  • npm run lighthouse:N/A —— 不参与站点构建产物
  • test:security:headers:N/A —— 本 PR 不改动 next.config 响应头(线上重复响应头问题另案说明)
  • 文档同步:docs/deployment/cicd/** 随代码同批入库
  • Conventional Commits 与垂直切片:单提交单主题,chore(infra)
  • 破坏性/共享状态动作已单独取得授权:rotate-credentials.shpurge-git-history.shrestore-cicd.sh 只入库不执行,本次未运行任何一项;服务器侧执行须另行授权

假绿灯纪律

  • 门禁命令实际执行过:上述 bash -n 6/6、js-yaml 3/3、硬编码扫描 0 命中均为本次真实输出
  • 未通过删测试/放宽断言/下调阈值让门禁变绿
  • 未把误报当问题修掉
  • 结论以 origin/* 与实测为准:cherry-pick 目标为 origin/dev(7df2dde),而非落后 34 个提交的本地 dev
  • 未验证项已显式列出(见下)

其他说明

未验证项(不以「应该没问题」代替运行)

  1. docker-compose.*.yml 只做了 YAML 语法解析,未执行 compose config / up —— 本机无该编排运行时依赖,启动会占用共享端口。
  2. jenkins/casc.yaml 未在任何 Jenkins 实例实际加载;plugins.txt 未与目标 Jenkins 版本做兼容性核对。
  3. 备份/恢复/轮换/历史清除脚本仅通过语法校验,事故流程本身本次未复跑

安全口径:本分支尚未纳入代码安全扫描覆盖(先前的针对性扫描只覆盖 UI 那 27 个文件),合并前建议补一次扫描。

## 变更摘要 把自托管 CI/CD(Gitea + Jenkins)的部署编排与**凭据整改**从 `refactor/optimize-ui` 中摘出,单独成为可评审单元。 15 个文件、+2092 行、**全部为新增**(`git show --name-status` 全为 `A`,不改动任何既有源码、构建配置或站点运行时)。 - `infra/cicd/`:docker-compose(gitea / jenkins)、JCasC、插件清单、备份/恢复、健康检查、容器日志截断、凭据轮换、git 历史清除脚本 - `docs/deployment/cicd/`:安装手册、高可用/备份/监控、**凭据事故复盘** - `infra/cicd/.env.example` 仅为占位模板;真实 `.env` 由 `.gitignore` 排除 拆出理由:凭据相关变更不应搭在 27 个 UI/文案提交的 PR 里被一并放行。 ## 关联 Issue 关闭:N/A —— 源自 2026-09 凭据事故复盘(`docs/deployment/cicd/03-credential-incident.md`),无对应 Issue。 ## 全链路检查 - [x] `npm run type-check`:N/A —— 本 PR 不含 TS/TSX 文件,未触及类型面 - [x] `npm run lint`:N/A —— 无 JS/TS 源码改动,eslint 作用域内文件集不变 - [x] 路由/链接真实:N/A —— 不新增页面或 `Link` - [x] CMS 内容模型:N/A —— 未触及 `content-types.ts` 与 seed - [x] 视觉/交互:N/A —— 无站点运行时改动;编排仅在自托管服务器生效 - [x] 暗黑模式 token:N/A —— 无 CSS/组件改动 - [x] 动效与品牌红约束:N/A —— 无 UI 改动 - [x] 数字口径 basis:N/A —— 无面向用户的文案或指标 - [x] 无遗留 `console.log` / `TODO` / `FIXME` / `.only()`:脚本为 bash,使用 `echo`/日志前缀输出,符合脚本惯例 ## 测试分层检查(L0–L3) - [x] **L0 单元**:N/A —— 无 TS/Rust 函数新增;shell 脚本按仓库既有约定不经 jest 覆盖 - [x] **L1 组件**:N/A —— 无 React 组件改动 - [x] **L2 E2E**:N/A —— 不影响站点页面行为 - [x] **L3 视觉回归**:N/A —— 无 UI 输出变化 - [x] 机械守卫正控制:N/A —— 本 PR 不新增守卫测试 - [x] 已运行相关验证(真实执行,非推定): - `bash -n` 6/6 通过:`backup-cicd.sh` `restore-cicd.sh` `healthcheck-cicd.sh` `truncate-container-logs.sh` `purge-git-history.sh` `rotate-credentials.sh` - `js-yaml` 解析 3/3 通过:`docker-compose.gitea.yml` `docker-compose.jenkins.yml` `jenkins/casc.yaml` - `casc.yaml` 凭据扫描:5 处 `${ENV}` 注入、**0 行疑似硬编码密钥** ## 质量门禁 - [x] `npm run test:unit`:N/A —— 无源码改动;基线 1594/132 已在同源提交上验证 - [x] `npm run test:coverage`:N/A —— 未触及覆盖率口径,**未下调任何阈值** - [x] `npm run test`(Playwright):N/A —— 不改变浏览器可见行为 - [x] `check:contrast` / `check:headings`:N/A —— 无样式与标题层级改动 - [x] `npm run lighthouse`:N/A —— 不参与站点构建产物 - [x] `test:security:headers`:N/A —— 本 PR 不改动 `next.config` 响应头(线上重复响应头问题另案说明) - [x] 文档同步:`docs/deployment/cicd/**` 随代码同批入库 - [x] Conventional Commits 与垂直切片:单提交单主题,`chore(infra)` - [x] 破坏性/共享状态动作已单独取得授权:`rotate-credentials.sh`、`purge-git-history.sh`、`restore-cicd.sh` **只入库不执行**,本次未运行任何一项;服务器侧执行须另行授权 ## 假绿灯纪律 - [x] 门禁命令**实际执行过**:上述 `bash -n` 6/6、`js-yaml` 3/3、硬编码扫描 0 命中均为本次真实输出 - [x] 未通过删测试/放宽断言/下调阈值让门禁变绿 - [x] 未把误报当问题修掉 - [x] 结论以 `origin/*` 与实测为准:cherry-pick 目标为 `origin/dev`(`7df2dde`),而非落后 34 个提交的本地 `dev` - [x] 未验证项已显式列出(见下) ## 其他说明 **未验证项(不以「应该没问题」代替运行)** 1. `docker-compose.*.yml` 只做了 YAML 语法解析,**未执行 `compose config` / `up`** —— 本机无该编排运行时依赖,启动会占用共享端口。 2. `jenkins/casc.yaml` 未在任何 Jenkins 实例实际加载;`plugins.txt` 未与目标 Jenkins 版本做兼容性核对。 3. 备份/恢复/轮换/历史清除脚本仅通过语法校验,事故流程本身**本次未复跑**。 **安全口径**:本分支尚未纳入代码安全扫描覆盖(先前的针对性扫描只覆盖 UI 那 27 个文件),合并前建议补一次扫描。
zhangxiang added 1 commit 2026-09-20 11:34:59 +08:00
- infra/cicd:docker-compose(gitea/jenkins)、JCasC(凭据统一 ${ENV} 注入,无硬编码)、
  备份/恢复、健康检查、凭据轮换与 git 历史清除脚本
- docs/deployment/cicd:安装、高可用备份监控、凭据事故复盘
- .env.example 仅为占位模板;真实 .env 由 .gitignore 排除
zhangxiang merged commit 4ab2f3cd8e into dev 2026-09-20 11:50:54 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novalon/novalon-website#27