README.md 7.5 KB

预生产分�?�?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/<服务�?:<tag>
  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/<prodDir>/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-k8sstore-k8s,名称可与其他视图重�?
*流水�? 真正执行构建�?Job,每个微服务一�?
多分支流水线 �?Git 分支自动建子 Job;若预生产固定一条分支(�?uat-20260202),用普通流水线 + 参数 GIT_BRANCH 更简�?

建议结构�?

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_produpy_contract_produpy_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 节点需具备�?

  • mvndocker(能访问 Harbor 443/80)、kubectl
  • �?Jenkins 在容器内:挂�?docker.sock,并�?kubectl �?kubeconfig 挂入或装在镜像内

Harbor 上建议建项目 alien_cloud,镜像名:39.106.135.88/alien_cloud/<prodDir>:<tag>�? 新建项目与机器人账号步骤�?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(集群接入、命名空间、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_STRATEGYrolling(直接替换)�?canary(Ingress 权重�?
  • CANARY_WEIGHT:灰度流量百分比(仅 canary�?
  • K8S_NAMESPACE:默�?alien-produ

首次部署前在 ACK 应用 k8s/examples/namespace.yaml 与各服务 deployment-*.yaml(或让流水线 kubectl apply 首次全量 apply)�?