# 预生产分??Harbor ?ACK 生产 K8S 流水? Harbor 宿主机:**39.106.135.88**(与 Jenkins 同机或同 VPC)。ACK 集群?*alien-ack-cluster**(华? 北京)? 本目录支?**单服务发?* ?**整体/多选发?*(Harbor + ACK);与宿主机 `docker compose` 晋升流水线(`Jenkinsfile-prod-promote-from-uat.groovy`)并行存在,互不替代,直?ACK 全量切流? --- ## 常见问题(Harbor / 目录结构 / 发版粒度? ### Harbor 要不要在 Web 界面手工操作? **日常发版不需要?* 流水线在 `k8s-produ-lib.groovy` 里自动完成: 1. `docker login 39.106.135.88`(凭?`harbor-robot-alien`? 2. `docker build` ??tag `39.106.135.88/alien_cloud/<服务?:` 3. `docker push` ?Harbor 4. `kubectl set image` ?ACK 拉同一 tag 运维**仅需一次?*?Harbor Web(或 API)完成:`alien` 项目、机器人账号、(可选)镜像保留策略。之后查镜像/删旧 tag/排障时仍可打开 Harbor UI?*不是发版必经步骤**? ### `_shared/k8s-produ-lib.groovy` 是什么?能单独部署吗? | 文件 | 角色 | Jenkins Script Path 是否指向?| |------|------|-------------------------------| | `produ/<服务>/Jenkinsfile` | **入口**(Jenkins 只认这个名字?| **?*,每?Job 指向各自路径 | | `_shared/k8s-produ-lib.groovy` | **共享函数?*(checkout、mvn、Harbor、kubectl?| **?*,由入口 `load '.../k8s-produ-lib.groovy'` 引用 | | `_shared/service-registry.groovy` | 七个服务列表 + whole/multi 筛?| 否,?`whole/Jenkinsfile` 使用 | 每个微服?Job 仍是 **单独一条流水线**(例如只构建 gateway);共享库是为避?7 份重复脚本,**不代?* `Jenkinsfile`? ### 既要单独发布,又要整体发布? | Jenkins Job(建议名?| Script Path | 粒度 | |----------------------|-------------|------| | `gateway-k8s` ?`dining-k8s` | `docs/jenkins/produ//Jenkinsfile` | **仅该服务**(Maven `-pl alien-xxx`?| | `alien-cloud-k8s-whole` | `docs/jenkins/produ/whole/Jenkinsfile` | **whole / single / multi**(参?`DEPLOY_MODE`,语义同 prod-promote?| 整体 Job 一?`mvn package` 打全仓库,再按选中服务依次 build/push/deploy;单服务 Job 只打对应模块,适合热修复单个服务? --- ## 一、Jenkins 任务如何组织(对应你截图中的「新建任务」) ### 1. 是否选「文件夹」? **是,推荐选「文件夹」?* | 类型 | 用?| |------|------| | **文件?* | 独立命名空间,其下可建多?**流水?* 任务,例?`gateway-k8s`、`store-k8s`,名称可与其他视图重?| | **流水?* | 真正执行构建?Job,每个微服务一?| | **多分支流水线** | ?Git 分支自动建子 Job;若预生产固定一条分支(?`uat-20260202`),用普通流水线 + 参数 `GIT_BRANCH` 更简?| 建议结构? ```text alien-cloud-produ-K8S-from-uat/ ?文件夹(你截图中的名称) ├── alien-cloud-k8s-whole/ ?流水线,Script Path: docs/jenkins/produ/whole/Jenkinsfile(整?多选) ├── gateway-k8s/ ?流水线,Script Path: docs/jenkins/produ/gateway/Jenkinsfile ├── store-k8s/ ├── second-k8s/ ├── store-platform-k8s/ ├── lawyer-k8s/ ├── job-k8s/ └── dining-k8s/ ``` **不要**在文件夹里再选「文件夹」类型去套微服务——微服务一级用 **流水?* 即可? ### 2. 是否?Pipeline script from SCM? **可以,且推荐?* 每个 `*-k8s` 流水?Job 配置? 1. **流水?* ?**定义**:Pipeline script from SCM 2. **SCM**:Git,仓?`http://8.152.195.41:3000/alien/alien_cloud`(与现网一致) 3. **分支**:`*/uat-20260202` ?`*/你的预生产分支` 4. **Script Path**(按服务不同): - gateway:`docs/jenkins/produ/gateway/Jenkinsfile` - store:`docs/jenkins/produ/store/Jenkinsfile` - ?见下? 5. **凭据**:`zhanghaomimapingzheng`(与 UAT 流水线一致) 6. **构建触发**:可选手动;稳定后加「上?UAT 构建成功」触? ?`Jenkinsfile-prod-promote-from-uat.groovy` 的关系: | 维度 | prod-promote-from-uat | produ K8S 流水?| |------|----------------------|------------------| | 制品 | UAT 目录 jar ?生产?compose | Maven jar ?镜像 ?Harbor ?ACK | | 发版粒度 | ?Job ?whole/single/multi | **whole Job** + **每服务一?Job** | | 灰度 | ?| 支持 Ingress 权重灰度(见 README-ACK-GRAY-RELEASE.md?| --- ## 二、微服务?Script Path 对照 | prodDir | 模块 | Jenkins Script Path | ACK Deployment(默认) | |---------|------|---------------------|-------------------------| | gateway | alien-gateway | `docs/jenkins/produ/gateway/Jenkinsfile` | `gateway` | | store | alien-store | `docs/jenkins/produ/store/Jenkinsfile` | `store` | | second | alien-second | `docs/jenkins/produ/second/Jenkinsfile` | `second` | | store-platform | alien-store-platform | `docs/jenkins/produ/store-platform/Jenkinsfile` | `store-platform` | | lawyer | alien-lawyer | `docs/jenkins/produ/lawyer/Jenkinsfile` | `lawyer` | | job | alien-job | `docs/jenkins/produ/job/Jenkinsfile` | `job` | | dining | alien-dining | `docs/jenkins/produ/dining/Jenkinsfile` | `dining` | | **(整体)** | 全部七个 | `docs/jenkins/produ/whole/Jenkinsfile` | ?`DEPLOY_MODE` | **未纳入本目录**(属其他仓库或镜像名不同,需另建 Job): - Python:`py_gateway_produ`、`py_contract_produ`、`py_esign_produ`(镜?`alien_gateway:local` 等) - `xxl-job-admin-produ`、Harbor 自身组件 --- ## 三、Jenkins 侧必配项(首次) ?Jenkins **全局**或文件夹 **凭据** 中准备: | 凭据 ID(示例,按实际改 Jenkinsfile 内常量) | 类型 | 用?| |---------------------------------------------|------|------| | `zhanghaomimapingzheng` | Username/password | Git 拉取 | | `harbor-robot-alien` | Username/password | `docker login 39.106.135.88` | | `ack-kubeconfig-alien` | Secret file | `KUBECONFIG`,内容来?ACK「连接信息」下?| Jenkins 节点需具备? - `mvn`、`docker`(能访问 Harbor 443/80)、`kubectl` - ?Jenkins 在容器内:挂?`docker.sock`,并?`kubectl` ?kubeconfig 挂入或装在镜像内 Harbor 上建议建项目 **`alien_cloud`**,镜像名:`39.106.135.88/alien_cloud/:`? **新建项目与机器人账号步骤**?**[README-HARBOR-SETUP.md](./README-HARBOR-SETUP.md)**? 基础镜像 `my-openjdk8-ffmpeg:v1` 需 **?push ?Harbor**(如 `39.106.135.88/alien_cloud/base/openjdk8-ffmpeg:v1`),并在 Job 参数 `BASE_IMAGE` 中填写,否则 ACK 节点拉不到? --- ## 四、ACK 与灰? 详述见同目录 **[README-ACK-GRAY-RELEASE.md](./README-ACK-GRAY-RELEASE.md)**(集群接入、命名空间、Ingress 灰度、节?Unknown 排查)? K8S 清单示例:`k8s/examples/`? --- ## 五、流水线参数速览 各服?Jenkinsfile 共用?`docs/jenkins/produ/_shared/k8s-produ-lib.groovy`,主要参数: - `GIT_BRANCH`:预生产分支 - `IMAGE_TAG`:默?`build-${BUILD_NUMBER}`,可?`uat-20260202-123` - `DEPLOY_STRATEGY`:`rolling`(直接替换)?`canary`(Ingress 权重? - `CANARY_WEIGHT`:灰度流量百分比(仅 canary? - `K8S_NAMESPACE`:默?`alien-produ` 首次部署前在 ACK 应用 `k8s/examples/namespace.yaml` 与各服务 `deployment-*.yaml`(或让流水线 `kubectl apply` 首次全量 apply)?