# 预生产分�?�?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)�?