部署上线
部署流程概览
后端项目通过 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 平台自动执行以下流水线阶段:
- 拉取代码:从 Git 仓库拉取最新代码
- 编译:执行
./gradlew build,编译 Java 源码 - 测试:运行单元测试(本地开发默认跳过,CI 环境强制执行)
- 打包:执行
./gradlew bootJar,生成可执行 Fat JAR - 构建镜像:根据 Dockerfile 构建 Docker 镜像
触发方式
- 自动触发:代码推送到指定分支后自动执行
- 手动触发:在 OAK 平台上手动点击构建
CD(持续部署)
部署架构
OAK CI/CD 平台部署在公司内网,直接对接 Kubernetes 集群,通过 kubectl 命令完成容器化部署。同时,OAK 支持扩展对接第三方云厂商(如阿里云、腾讯云、华为云等),通过 API 或 Webhook 的方式将部署能力延伸至公有云环境。
部署环境
- 公司内网环境:OAK 平台直连 K8s 集群,通过
kubectl执行部署,适用于内部测试、预发布及生产环境 - 公有云环境:OAK 通过 API 或 Webhook 对接云厂商,触发云端部署流程,适用于阿里云、腾讯云、华为云等公有云场景
部署流程
- 镜像推送:CI 阶段构建的 Docker 镜像推送至 Harbor 镜像仓库
- 触发部署:OAK 平台触发部署任务(自动或手动)
- 镜像拉取:目标环境从 Harbor 拉取最新镜像
- 容器启动:Kubernetes 启动 Pod,运行容器实例
- 健康检查:执行存活探针(Liveness Probe)和就绪探针(Readiness Probe),确认服务正常运行
回滚
版本回滚
通过 OAK 平台进行版本回滚:
- 进项目构建页面
- 选择构建记录
- 选择要回滚的版本
- 点击 "回滚"
WARNING
- 回滚前确认目标版本稳定
- 数据库变更需单独处理
- 回滚后验证服务状态
部署后验证
- 访问
/actuator/health确认服务健康 - 访问
/doc.html确认 API 文档可用 - 确认 Nacos 控制台服务已注册
- 确认 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 - 后端。