一.gitlab-cicd技术点
DevOps CI/CD理念与主流工具
DevOps 运动的兴起给业界提供了一个参考答案。其中CI 和 CD两个理念就是解决开发者和运维协同工作的一剂良方。
CI 是 Continuous Integration 的缩写,表示持续集成。CD 是 Continuous Delivery 的缩写,表示持续交付,有时CD也表示持续部署(Continuous Deployment)。
持续集成的要求是代码提交后,管理工具在检测到代码变更后,会自动拉取分支代码进行构建,包括编译与单元测试。有更高要求的,还要完成模块测试与集成测试。
持续交付则是在持续集成的基础上,提交可用于生产环境部署的正式程序、代码与配置文件。在持续交付阶段,也要进行程序的自动化测试,并实现自动化发布。
持续部署是在持续交付的基础上,将代码变更应用到生产环境中。它可以借助多种自动化的部署手段,实现程序的平滑升级/回滚。
市场上已经有多款工具可供选择,包括GitLab CI/CD、Jenkins、Circle CI、Pipelines等。我们对最主流的两款工具进行介绍。
Jenkins发布于2011年,因其丰富的插件生态、并行执行能力和活跃的社区,赢得了广泛的支持。但Jenkins也有不足,那就是其与代码托管仓库之间的数据交换。
2015年,GitLab CI/CD发布,除了出色的CI/CD功能,还能够轻松管理git源码库,逐渐成为非常受欢迎的DevOps CI/CD工具。
1.代码托管工具
- 可协同:在功能层面要包含仓库管理、分支管理、权限管理、提交管理、代码评审等代码存储和版本管理等功能,让开发者更好的协同工作;
- 可集成:好的代码托管服务应该具备灵活和简易的三方工具集成能力,降低 DevOps 的实施落地成本 ;
- 安全可靠:这是最重要的一点,对于个人开发者可能无感,但是对于企业而言,代码的安全性、服务的稳定性、数据是否存在丢失的风险,是会最被优先考量的点。
常用代码托管工具见下表:
组件 | gitlab | Gitee | GitHub | 云托管 |
企业级 | 支持企业级,收费 | 企业级,免费 | 企业级,免费 | 企业级,收费 |
搭建环境 | 不需要搭建 | 不需要搭建 | 需要搭建 | 不需要搭建 |
存储环境 | 不受企业控制 | 不受企业控制 | 企业控制 | 不受企业控制 |
2.集成流水线工具
集成流水线就像传统的工业流水线一样,在经历构建、测试、交付之后,生产出一代一代更新迭代的软件版本。实现了软件产品小步迭代、高频发布、适时集成、稳定的系统演进线路图。在选择集成流水线工具的时候,我们需要关注:
- 版本控制工具的支持;
- 每个构建是否可以支持指定多个代码源 URLS;
- 是否支持构建产物管理库,如公有云对象存储等;
- 是否支持部署流水线,类似于一个或多个构建完成后触发另一个构建;
- 是否支持并行构建;
- 是否支持构建网格,以及对网格内机器管理的能力。如能否将多个构建同时分配到多个构建机器上执行,以提高执行速度;
- 是否有良好的开放 API,比如触发构建 API、结果查询 API、标准的 Report 接口等;
- 账户体系,是否支持第三方账户接入,如企业 LDAP 等;
- 是否有良好的 Dashboard;
- 多语言支持;
- 与构建工具(如 Maven,Make,Rake,Nant、Node 等)和测试工具的集成。
组件 | Jenkins | gitlab-cicd | Walle | Zading |
开源/商业性 | 开源 | 开源 | 开源 | 开源/商用 |
产品类型 | 自托管/本地部署 | 自托管/本地部署 | 自托管/本地部署 | 自托管/本地部署 |
内置cicd | 自定义cicd部署 | 内置cicd | 内置cicd | 内置cicd |
独特功能 | 插件 | 统一集成代码管理 | 易操作的webui | 测试环境一键部署 |
安装配置 | 简单 | 简单 | 简单 | 简单 |
构建piplines | 支持插件1k+ | 支持 | 支持 | 支持 |
cicd部署面板 | 部分支持 | 最近状态,单页面支持 | 完美部署面板 | 完美部署面板 |
代码质量 | sonarqube插件 | 内置 | sonarqube插件 | sonarqube插件 |
3.服务注册发现工具
服务发现为 Deploy 的最后环节,缺一不可。无论是四七层负载均衡,还是微服务、RPC 服务框架,服务发现都是产品投产的临门一脚。服务注册发现工具选型需要从生态发展、便利性、语言无关性等角度来综合考量。
常用的组件工具如下表:
4.持续监控
服务的稳定性离不开监控系统的保驾护航。监控系统为服务稳定运行提供数据可视化、异常报警、异常定位、故障追踪等能力;同时监控系统还为服务持续优化升级提供依据和考量标准。
监控系统有三大基石:指标、日志、分布式追踪。
指标体系:聚焦于故障发现环节,服务以数字形式评估出服务 QPS、成功率、延迟、容量等关键指标,搭配报警系统可以保证当核心指标异常时及时通知开发 / 运维人员。除了核心指标外,服务还可以将各模块 / 阶段的瓶颈点、外部依赖指标量化,建立更加完善服务状态概览,以便服务开发 / 运维人员快速定位异常,完成根因分析。指标系统优势是聚合能力,用较少的存储资源和计算资源表达系统内部状态。
常用工具及功能对照如下:
二.cici工作流程
用过 GitLab 的同学肯定也对 GitLab CI/CD 不陌生,GitLab CI/CD 是一个内置在 GitLab 中的工具,它可以帮助我们在每次代码推送时运行一系列脚本来构建、测试和验证代码的更改以及部署。
GitLab CI 的基本流程如下:
1. 开发人员推送代码
2. 触发 GitLab CI 启动
3. runner 执行预定义脚本
项目部署流程
1. 开发人员提交代码到GitLab仓库。
2. 触发GitLab 流水线创建,Runner 执行 .gitlab-ci.yml 定义的 stages。
3. 将制作好的镜像推送到已有的镜像仓库,供后续的Deploy流程使用。
4. 通过Rainbond自定义API的方法,触发平台组件的自动构建,进入Deploy阶段。
平台化+原子化设计,平台提供基础服务,能力可以通过原子化形式无限扩展,既兼顾了平台的稳定性,又大大减低了现有工具平台的接入成本