目的
通过 Rainbond 实现企业的开发、测试、生产持续交付体系,快速搭建 DevOps 体系。
意义
Rainbond 可以在企业的开发、测试、生产各个环节体现价值。本文档的内容会帮助用户基于 Rainbond 体系,快速搭建整个 DevOps 体系。
前提条件
遵循文档安装好的联机的开发测试用 Rainbond 环境,如果存在最终生产环境,那么需要生产环境也安装好 Rainbond。
业务应用的源代码。
已有的 Jenkins CI/CD 体系。(可选)
已有的镜像仓库,如 Harbor。(可选)
已有的代码托管平台,如 Gitlab。(可选)
环境分割与打通
一般的 IT 公司会将自己的环境划分为:开发环境、测试环境、生产环境。在 Rainbond 中,可以通过团队(租户级隔离)或者集群(部署在不同集群中)来进行环境分割。不同分割方式的环境之间,交互的方式有所差别。其中,多集群的分割方式,需要 Rainbond 企业版本或公有云版本的支持。
推荐的方式:
通过创建团队来分割 开发、 测试环境,参见 团队管理与多租户。
通过集群来区别开发测试集群和生产集群。
对于企业用户,可以通过 Rainbond 的多集群管理功能打通开发测试集群和生产集群。
对于开源用户,可以 通过共享库实现离线交付 来完成最终的交付。
整合
实操从开发环境的搭建开始,在这个过程中,我们提供了相关方案快速整合各种开发工具,来实现代码托管、自动的 CI/CD 、 代码静态检测等常用场景。即使企业内部还没有相关的工具,也可以 Rainbond 共享库,快速从云端同步到本地共享库进行安装。
整合 Gitlab
参考 整合 Git 仓库快速部署组件 来整合已有的 Gitlab 。如果还没有自己的代码仓库,建议通过云端同步到本地共享库安装。
整合 Jenkins CI/CD 体系
参考 对接 Jenkins CI/CD 体系 来接入企业已有的 Jenkins CI/CD 体系。如果还没有自己的 Jenkins ,还希望能够快速使用,建议通过云端同步到本地共享库安装。
整合 SonarQube
参考 对接 SonarQube 完成静态代码检测 ,如果还没有自己的 SonarQube ,建议通过云端同步到本地共享库安装。
持续集成/持续构建
在这一个环节,将以实例的演示操作,来体现如何进行持续集成与持续构建。
演示业务准备
串通整个DevOps的全过程,将会以一个实际的用例来进行演示。选取的演示用例是开源 GVP 项目 NiceFish 美人鱼博客建站系统 感谢开源精神,感谢作者大漠穷秋。
整个业务系统可以细分为下面的四个服务组件:
前端项目:NiceFish-UI 项目会基于镜像部署,整个 CI/CD 流程是:提交代码后,Jenkins 调度远端服务器拉取最新代码并制作镜像,制作完成后推送到开发环境中的 HarBor 镜像仓库。推送完成后触发测试环境中的 NiceFish-UI 服务组件自动拉取镜像持续构建。
后端项目:NiceFish-cms 项目基于源码部署,整个 Ci/CD 流程是:提交代码后,Jenkins 调度 SonarQube 进行静态代码质量检测,检测通过后触发测试环境中的 NiceFish-cms 服务组件自动拉取源代码持续构建。
Mysql 数据库:NiceFish-DB 项目基于 Dockerfile 部署。
Redis:直接由共享库一键安装部署。
按照上述说明,将测试业务部署在 测试环境 中。
对于 NiceFish-UI、NiceFish-cms、NiceFish-DB 这三个项目,开启基于 API 触发自动构建 功能:
自定义 API 构建
配置 CI/CD
以 NiceFish-cms 项目为例,演示整个持续集成/持续构建(CI/CD)流程。
前文已经提到,如何将该项目,通过Gitlab拉取代码,部署在Rainbond上的测试环境中,并开启自动构建的OpenAPI。
接下来,会描述在Jenkins中创建的自由风格任务的主要流程,通过该流任务,来将整个持续集成/持续构建(CI/CD)流程落地。
任务描述
这个示例,是利用 Free-Style 风格创建的 Jenkins 任务:
完成代码 push 事件触发 Jenkins 任务
Jenkins 获取最新代码后,结合 sonarqube 进行代码分析
分析完毕后,调用API使Rainbond项目开始构建
定义代码仓库地址并通过GitLab WebHooks触发
这个环节的设置,可以在 NiceFish-cms 项目的代码仓库接收到 Push 事件后,触发整个任务的开始。
- 指定代码仓库地址
指定代码仓库地址
- 定义WebHooks
Jenkins中的设置:
Jenkin设置
GitLab中的设置:
Gitlab设置
代码静态检测
通过这个环节的设置,可以定义当前项目的代码静态检测,作为持续集成过程中的一环。其他的持续集成过程,按照Jenkins体系的方式对接即可。
增加构建步骤:调用顶层 Maven 目标
执行代码检测
这个环节结束后,持续集成阶段结束,紧接着进行持续构建。
持续构建
上述的环节全部成功通过后 ,接下来这个环节的设置,即可完成持续构建的设置。该步骤触发已部署的 NiceFish-cms 进行自动构建。自动构建过程会触发Rainbond上运行的服务组件,从构建源(本示例中是源码)拉取最新的代码进行构建,将最新的改动上线。
增加构建步骤:执行 shell
触发自动构建
持续交付
基于 Rainbond 实现持续交付体系,推荐使用 共享库 实现。
经过上文中的 持续集成/持续构建 后,产生的业务可以不断的发布到共享库中形成不同的版本。重复执行 [应用模版的升级])(/docs/get-start/upgrade-from-market/),即可完成应用的持续交付。
如果最终生产环境是离线的情况,那么请参考 通过共享库实现离线交付。
生产环境运维
对于部署于 Rainbond 的应用,我们提供了全方位的自动化运维赋能:
应用拓扑图:服务组件关系图形化展示,依赖关系拖拉拽式拼接组装。
应用级备份/恢复:整个应用一键带数据备份,自由在不同集群、不同团队间迁移、恢复。
网关策略:功能强大的自定义网关策略设置、证书管理,[实现滚动升级、A/B 测试、灰度发布、蓝绿发布]()。
生命周期管理:可以管理应用以及服务组件的开启、关闭、重启、更新、构建全生命周期。
版本管理:Rainbond 自带的版本管理系统,可以快速进行 基于版本号一键上线/回滚。
操作记录审计:明确每个服务组件的关键操作的执行人与执行时间。
操作日志:服务组件的每个操作,都会有对应的操作日志。如构建、升级等。
监控:针对 WEB 类和 Mysql 提供实时性能分析,提供可视化的平均响应时间、吞吐率、在线人数等信息,实时监控服务状态。
日志:提供服务组件日志实时推送功能,支持日志分割与下载,并可以通过插件支持 ELK 日志收集
伸缩:支持内存、实例数量实时伸缩,并可以配置自动伸缩,以及自动负载均衡。保证线上业务弹性应对流量。
环境配置:支持自定义环境变量输入,配置文件挂载并在多个服务组件间共享。
依赖:原生 Service Mesh 微服务支持,组件间根据依赖关系快速拼接组装,基于环境变量的连接信息配置灵活。
存储:支持多种存储类型(块设备、共享文件存储、内存存储等),多组件存储共享。
插件体系:针对服务组件的插件扩展,原生提供多种插件,快速实现性能实时分析、微服务网络治理功能、Mysql 数据备份与恢复。
构建源:各类开发语言构建环境图形化灵活设置。自动构建配置,为 CD/CD 提供入口。
部署类型配置:多部署类型选择,应对不同类型的服务组件。
健康检测:有效监控服务组件当前健康状态,自动化的不健康处理策略。
权限管理:不同用户对服务组件拥有不同操作权限。