Skip to content

部署上线 ​

部署流程概览 ​

后端项目通过 OAK CI/CD 平台进行容器化部署:

应用配置 → 代码推送 → 编译打包 → 构建镜像 → 推送 Harbor → 部署到目标环境

部署前检查 ​

  • ./gradlew bootJar 成功无报错
  • build/libs/ 目录下存在 guava-admin-starter-{version}.jar
  • 确认目标环境的 Nacos namespace / group 配置正确
  • 确认数据库、Redis、Nacos 等依赖服务可达

OAK 应用配置 ​

以 guava-admin 为例,OAK 平台上的应用配置分为三部分:

一、基础信息(项目与全局设置) ​

定义应用的基础属性和整体环境:

  • 项目名称:guava-admin(应用的唯一标识)
  • 项目类型:Spring Boot
  • 命名空间:guava(K8s 集群中隔离资源的逻辑单元)
  • 自动部署:开启(代码提交后自动触发部署)
  • 时区:Asia/Shanghai(容器运行时的系统时区)

二、源码配置(CI / 构建与镜像仓库配置) ​

定义代码拉取、构建及镜像推送:

  • Git 仓库地址:填写 Git 仓库地址(如 http://git.eicp.net/xxx/guava-platform.git)
  • Git 协议:http(拉取代码的协议,可选 http 或 https)
  • 分支:部署分支(如 master)
  • Git 凭证:git(拉取代码所需的凭据 ID)
  • Builder 版本:24(用于构建镜像的构建器版本)
  • Harbor 域名:填写镜像仓库地址(如 harbor.cccexpert.top)
  • Harbor 凭证:harbor(推送镜像到 Harbor 所需的凭据)
  • 镜像地址:foton-ses/guava-admin(构建后镜像在 Harbor 中的存放路径)
  • 保留构建镜像数:1(保留最近构建的镜像数量,节省磁盘空间)

三、部署配置(K8s 工作负载与运行时配置) ​

1. 基础部署与网络 ​

  • 服务名称:guava-admin(K8s Service 的名称)
  • 副本数:1(Pod 的实例数量)
  • 环境配置:dev(部署的环境标签,区分开发/测试/生产)
  • 服务类型:NodePort(对外暴露服务的方式,通过节点 IP+端口访问;ClusterIP 仅供集群内访问)
  • 容器端口:7003(应用在容器内监听的端口)
  • 镜像拉取:Always(K8s 拉取镜像的策略,Always 表示每次都去仓库拉取)
  • 更新策略:RollingUpdate(滚动更新策略,保证服务不中断;Recreate 为先停后建)
  • 镜像密钥:未填(私有 Harbor 需指定拉取镜像的 Secret 密钥)

2. 资源限制与生命周期 ​

  • CPU 资源:200m(CPU 请求量,单位毫核,200m 即 0.2 核)
  • 申请内存:500Mi(内存请求量,单位 MiB)
  • 内存上限:800Mi(内存限制量,容器最多使用 800Mi,超过会被 OOM Kill)
  • 优雅终止时间:30s(Pod 终止前的等待秒数,给应用时间处理完剩余请求)

3. 健康检查(探针) ​

  • 活跃探针延迟:60s(Liveness Probe 启动后延迟 60 秒才开始检查,防止过早重启应用)
  • 就绪探针延迟:60s(Readiness Probe 启动后延迟 60 秒才开始检查,防止过早接入流量)
  • 检查间隔时间:30s(探针执行的频率,每 30 秒检查一次)
  • 超时时间:15s(探针执行超时时间,超过 15 秒视为失败)
  • 成功阈值:1(判定为成功的连续成功次数)
  • 失败阈值:5(判定为失败的连续失败次数,连续失败 5 次才会重启或剔除流量)

CI(持续集成) ​

代码推送到仓库后,OAK 平台自动执行以下流水线阶段:

  1. 拉取代码:从 Git 仓库拉取最新代码
  2. 编译:执行 ./gradlew build,编译 Java 源码
  3. 测试:运行单元测试(本地开发默认跳过,CI 环境强制执行)
  4. 打包:执行 ./gradlew bootJar,生成可执行 Fat JAR
  5. 构建镜像:根据 Dockerfile 构建 Docker 镜像

触发方式 ​

  • 自动触发:代码推送到指定分支后自动执行
  • 手动触发:在 OAK 平台上手动点击构建

CD(持续部署) ​

部署架构 ​

OAK CI/CD 平台部署在公司内网,直接对接 Kubernetes 集群,通过 kubectl 命令完成容器化部署。同时,OAK 支持扩展对接第三方云厂商(如阿里云、腾讯云、华为云等),通过 API 或 Webhook 的方式将部署能力延伸至公有云环境。

部署环境 ​

  • 公司内网环境:OAK 平台直连 K8s 集群,通过 kubectl 执行部署,适用于内部测试、预发布及生产环境
  • 公有云环境:OAK 通过 API 或 Webhook 对接云厂商,触发云端部署流程,适用于阿里云、腾讯云、华为云等公有云场景

部署流程 ​

  1. 镜像推送:CI 阶段构建的 Docker 镜像推送至 Harbor 镜像仓库
  2. 触发部署:OAK 平台触发部署任务(自动或手动)
  3. 镜像拉取:目标环境从 Harbor 拉取最新镜像
  4. 容器启动:Kubernetes 启动 Pod,运行容器实例
  5. 健康检查:执行存活探针(Liveness Probe)和就绪探针(Readiness Probe),确认服务正常运行

回滚 ​

版本回滚 ​

通过 OAK 平台进行版本回滚:

  1. 进项目构建页面
  2. 选择构建记录
  3. 选择要回滚的版本
  4. 点击 "回滚"

WARNING

  • 回滚前确认目标版本稳定
  • 数据库变更需单独处理
  • 回滚后验证服务状态

部署后验证 ​

  1. 访问 /actuator/health 确认服务健康
  2. 访问 /doc.html 确认 API 文档可用
  3. 确认 Nacos 控制台服务已注册
  4. 确认 SkyWalking 链路追踪正常

常见问题 ​

现象原因处理
Docker 构建时 JAR 文件找不到未先执行 ./gradlew bootJar确认 build/libs/ 存在 JAR 后再构建镜像
容器启动后健康检查失败启动超时或依赖不可达增大 start-period(当前 90s),检查 Nacos / MySQL / Redis 可达性
生产环境如何查看 SkyWalking 链路日志上报配置确认 SkyWalking OAP 可达,logback-spring.xml 已配置 gRPC 上报
Nacos 服务未注册配置错误确认 spring.cloud.nacos.discovery.namespace 与控制台一致
应用启动报 IllegalAccessError缺少 JVM 参数Dockerfile 启动命令添加 --enable-native-access=ALL-UNNAMED

更多问题见 FAQ - 后端。

相关链接 ​