Why #
传统的软件交付,强依赖人力,需要运维/开发人员手动执行脚本,手动传输文件( ftp/oss 等)
这么做比较低效且容易出错,由此诞生了很多自动化的系统,用于简化软件交付的成本,提高交付安全性和稳定性
市面上这些成熟的系统有 Jenkins,Gitlab CI, CirCle CI 等,那么在企业内部,为什么我们还需要额外的 CI 系统?
Jenkins 局限性 #
- 插件系统复杂,不利于维护
- 人员管理,权限管理,CI 模板管理
- 不是很好用的 UI 和交互
- …
Gitlab CI 局限性 #
- 开源软件,但额外的功能需要付费订阅
- 跟 Gitlab 强绑定,存在版本差异 (cache, yml 配置等)
- 人员管理,权限管理, CI 模板管理,发布审批等功能不完善
- 配置复杂,学习成本高
- 每个仓库都必须有 .gitlab-ci.yml 文件,容易被开发误改,带来安全风险
- ui 及交互复杂 (all in one)
- 私有部署的 gitlab 的维护强依赖基础运维团队,跨大版本升级有风险
发布审批功能如下图所示,需要在 14.7 的高级版以上支持,且为 beta 阶段
基于文件的 cache 策略及配置,要在 12.5 版本后支持
模板继承 要在 11.4 版本后支持
所以,如果需要用到 gitlab 的全部高级功能,那么得去升级到高级版 (premium) 才行,价格如下图所示,
详情可参考 gitlab 官网,
企业级 CI 的需求 #
对企业而言,环境的稳定性,发布安全性,是很重要的
所以 CI 的执行,需要很强的人员管理,权限管理等
人员管理 #
对某个 Git Repo 而言,只能指定的人员去触发 CI
CI 配置管理 #
只允许指定人员修改 CI 的配置
时间窗口管理 #
只允许指定的时间段去执行 CI,保障环境的稳定性
审批管理 #
指定环境的 CI 执行需要额外的人员审批后,方可执行
Pulse CI #
Pulse CI 旨在满足企业级的 CI 需求,同时从开源方案中吸取优秀经验,为开发者提供良好的使用体验,降低学习成本
设计理念 #
- 基于 Gitlab 的人员管理,组管理提供权限管理
- 基于 .gitlab-ci.yml 的子集实现 CI 配置模板
- 提供良好的用户体验和使用文档,降低学习和维护成本
- 提供通用解,能解决大多数企业的内部使用场景