最近的项目基本采用容器化部署, 由 Rancher 统一编排 . 在持续过程建设中 , 由于我们代码是托管在 腾讯开发者平台 不在 Rancher 默认支持范围内 , 在持续构建过程中 , 最后一步更新服务始终只能手动去 Rancher UI 点击升级 , 甚是繁琐 .

本篇将讲述如何通过API升级服务

如若环境支持 , 使用 Rancher 自身的流水线部署其实是很方便的 , 默认支持以下几种托管仓库 .

持续构建流程

首先说一下项目目前持续集成的整体流程

1. Jenkins 参数选择构建

然后 Jenkins 会去仓库拉取代码 , 编译 , 打包镜像然后上传到私有镜像仓库

2. 更新Rancher服务

目前是在 Jenkins 构建后手动去 Rancher UI 上点击升级服务 , 比较繁琐 , 因此要将此步骤自动化 , 通过调用 Rancher API 实现.

Rancher 4个主要 API 分别是

1
2
3
4
5
6
7
8
# 1.获取一个服务的详细信息
GET https://<rancher_server>/v3/project/<project_id>/workloads/deployment:<rancher_namespace>:<rancher_service>
# 2.获取服务的所有容器信息
GET https://<rancher_server>/v3/project/<project_id>/pods/?workloadId=deployment:<rancher_namespace>:<rancher_service>
# 3.根据容器名删除容器
DELETE https://<rancher_server>/v3/project/<project_id>/pods/<rancher_namespace>:<container_name>
# 4.更新服务
PUT https://<rancher_server>/v3/project/<project_id>/workloads/deployment:<rancher_namespace>:<rancher_service>

我们这里用到的是 1 和 4

变量参数通过 Rancher 中查询获得 , 在实践中发现, 直接拿到获取的服务信息调用 4 更新服务的接口 , 偶尔服务不会更新 , 后面发现需要将参数中的时间戳进行自增 , 方可达到立即升级的效果 .

参考链接

Docker+Jenkins+Pipline实现持续集成