README.md 7.4 KB

预生产分支 → Harbor → ACK 生产 K8S 流水线

Harbor 宿主机:39.105.153.68(Web:http://39.105.153.68/harbor/)。Jenkins 示例:39.106.135.88:30003。ACK:alien-ack-cluster(华北2 北京)。

本目录支持 单服务发版整体/多选发版(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/<服务名>:<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-k8sdining-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,镜像名:39.106.135.88/alien/<prodDir>:<tag>

基础镜像 my-openjdk8-ffmpeg:v1先 push 到 Harbor(如 39.106.135.88/alien/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)。