# Alien-Cloud-K8s-Whole Job 配置清单 目标:**一次 Job** 支持 `whole` / `single` / `multi`,把预生产 Harbor 镜像晋升到生产 tag,并可选批量更新 ACK。 **不**拉 `alien-*` 业务源码、**不** Maven、**不** docker build。 与单服务 **Gateway-K8s** 的区别:Whole 管七个服务组合;日常只发 gateway 用 `gateway/Jenkinsfile` 即可。 --- ## 常规(General) | 项 | 建议 | 你截图 | |----|------|--------| | 描述 | `预生产分支 → Harbor 晋升 → ACK;whole/single/multi` | ✓ 已写,可保留 | | **参数化构建过程** | **不必勾** | 未勾 ✓;`DEPLOY_MODE` 等在 Jenkinsfile `parameters {}` 里 | | 丢弃旧的构建 | 建议勾,保留 **15** | 与 Jenkinsfile `buildDiscarder` 一致 | | **不允许并发构建** | **建议勾** | 未勾 → 建议勾,避免两次 whole 同时改 ACK | | Gogs / 触发器 | 手动发版可全不勾 | ✓ | 首次保存后请 **立即构建一次**,之后左侧会出现 **「Build with Parameters」**。 --- ## 流水线(Pipeline) | 项 | 应填 | 你截图 | |----|------|--------| | 定义 | Pipeline script from SCM | ✓ | | Repository URL | `http://8.152.195.41:3000/alien/alien_cloud` | 若显示 `alien cloud`(空格)请改为 **`alien_cloud`** | | Credentials | `dujian (git)` | ✓;**不要** Harbor 机器人 | | 分支 | `*/uat-20260202` | ✓(与预生产分支一致) | | Script Path | **`docs/jenkins/produ/whole/Jenkinsfile`** | ✓ | | **轻量级检出** | **勾选** | ✓;脚本内再稀疏拉 `docs/jenkins/produ/_shared/` | 凭据(全局,非 SCM): | ID | 用途 | |----|------| | `harbor-robot-alien` | docker login 153.68 | | `ack-kubeconfig-alien` | kubectl | --- ## Jenkinsfile 三阶段(与界面无关,自动执行) ```text Plan → 解析 DEPLOY_MODE,打印将晋升的服务列表 Promote images → docker pull/tag/push(七个或子集) Deploy to ACK → DEPLOY_STRATEGY≠skip 且非 DRY_RUN 时 kubectl set image ``` --- ## 参数用法(Build with Parameters) ### DEPLOY_MODE | 模式 | 行为 | 还需填写 | |------|------|----------| | **whole** | 七个 Java 服务全部晋升 | 忽略 SINGLE / MULTI_* | | **single** | 只晋升一个 | `SINGLE_SERVICE=gateway` 等 | | **multi** | 勾选多个 | 至少勾一项 `MULTI_gateway` … `MULTI_dining` | ### 镜像 tag(七个服务共用同一 SOURCE_TAG) | 参数 | 说明 | |------|------| | `SOURCE_TAG` | UAT 已在 Harbor 的 tag,如 `uat-build-42` | | `TARGET_TAG` | 留空 → `produ-<构建号>`;七个服务打**同一**生产 tag | | `DEPLOY_STRATEGY` | `skip` 只推 Harbor;`rolling` 滚更 ACK;`canary` 灰度 | | `DRY_RUN` | 只 Plan,不 pull/push | ### 推荐试跑顺序 1. `DEPLOY_MODE=single`,`SINGLE_SERVICE=gateway`,`DRY_RUN=true` → 看 Plan 2. 同上,`DRY_RUN=false`,`DEPLOY_STRATEGY=skip` → 只晋升 gateway 镜像 3. `DEPLOY_MODE=whole`,`DEPLOY_STRATEGY=skip` → 七个服务只推 Harbor 4. 确认 Harbor 后,`DEPLOY_STRATEGY=rolling` → 更新 ACK --- ## Whole Job vs 七个单服务 Job | 场景 | 用哪个 Job | |------|------------| | 只发 gateway | **Gateway-K8s**(更简单) | | 一次发七个 / 多选两三个 | **Alien-Cloud-K8s-Whole** | | 与 prod-promote 习惯一致 | Whole 的 `DEPLOY_MODE` 同 `Jenkinsfile-prod-promote-from-uat` | 勿再建 `promote-image` Job(与 whole 脚本重复),二选一即可。 --- ## 前置条件 1. UAT 已将七个镜像推到 `39.105.153.68/alien_cloud/<服务>:`(可只推部分,但 whole 会对缺失镜像 pull 失败) 2. Jenkins 节点(88)`insecure-registries` + `harbor-robot-alien` 已配置 3. Gitea 上 `uat-20260202` 分支已包含最新 `whole/Jenkinsfile` ## 故障:`MissingContextVariableException: FilePath is missing` 日志若在 **Start of Pipeline 后立刻出现 `[Pipeline] load` 然后失败**,说明 Gitea 上仍是**旧版** Jenkinsfile(在 `pipeline { agent any` **之外**顶层写了 `load`)。 处理: 1. 将仓库中最新 `docs/jenkins/produ/whole/Jenkinsfile` **push 到 Job 使用的分支**(如 `uat-20260202`) 2. Jenkins Job 点 **保存** 后重新构建(不要 Replay 旧运行) 3. 成功日志应先出现 `[Pipeline] agent`、`Checkout` / `sparse`,再在 **Plan** 阶段里 `load`