Hi , Caicloud 宣布开源其 CI/CD 平台 Cyclone,专注解决微服务架构下面向容器的 CI/CD 和版本管理问题。 Cyclone 项目是基于 K8S 的第一个 CI/CD 工具,完善了 K8S 生态圈。 Cyclone 在 Github 上的地址: https://github.com/caicloud/cyclone ,欢迎试用!
关于 CI/CD 背景知识
持续集成( CI )是一种软件开发实践,即团队成员经常集成他们的工作,每次集成都需要通过自动化的构建,包括编译、发布、自动化测试来验证,从而尽早的发现集成错误。持续交付( CD )是指频繁地将软件新版本交付给质量团队(或者用户)以供评审。如果评审通过,那么就发布到生产环境。每当代码库里有一个变化,如果能自动且随时触发以上过程,那就达成了持续发布( CD )。
Docker 是一款基于 LXC 的容器引擎,自 2013 年开源以来,因为其易用性、高可移植性在开源社区非常火热。 Docker 将软件与其依赖环境打包起来,以镜像方式交付,让软件运行在“标准环境”中,这非常符合云计算的要求。各大 IT 巨头纷纷跟进,基于 Docker 容器技术创业公司也如雨后春笋, Docker 创造了一个崭新的容器云行业。 Docker 技术应用广泛。如,利用其隔离特性,为开发、测试提供一个轻量级独立沙盒环境进行集成测试。加速本地开发和构建流程,使其更加高效轻量化,开发人员可以构建、运行并分享容器,轻松提交到测试环境中,并最终进入生产环境。
Caicloud 的容器云 CI /CD 实践
Caicloud 作为国内领先的容器集群服务解决方案供应商,向用户提供企业级的 Claas 、 Containerizor 、 Cyclone 、 Cargo 、 Cubernetes 、 Clever 六大闭环服务。
Cyclone 作为其中重要一环,是基于 Docker 容器沙盒隔离特性实现的持续集成,将软件与其依赖环境打包起来,以镜像方式交付,让软件运行在“标准环境”中,原生支持多种容器云平台持续交付的工具。具有以下特性:
所有编译、构建、测试、发布过程均以容器为载体,消除环境差异性。通过版本控制工具触发流水线持续集成;
生成容器镜像并输出安全报告,确保构建的镜像安全可靠。全过程可视化,契合团队协作,提高研发效率;
管理组件支持微服务多组件联合发布,使用图形化界面展示组件的依赖关系及联合发布的过程和状态,应用拓扑关系图形化;
基于发布策略和角色控制功能,提供灵活的持续部署方式。基于容器和镜像的版本控制,提供多种升级回滚策略。
Cyclone 实现原理
CI/CD 工作流
Cyclone 提供了丰富的 API 供 web 应用调用,通过 API 建立版本控制系统中代码库与 Cyclone 服务关联关系后,版本控制系统的提交、发布等动作会通过 webhook 通知到 Cyclone-Server ,启动一个基于 Docker in Docker 技术的 Cyclone-Worker 容器,在该容器中从代码库中拉取源码,按照源码中 caicloud.yml 配置文件,依次执行:
PreBuild :在指定编译环境中编译可执行文件;
Build :将可执行文件拷到运行环境容器中,打成镜像发布到镜像仓库中;
Integretion :使用 Build 阶段构建的镜像启动一个容器,启动持续集成所依赖的微服务容器进行集成测试; PostBuild :启动一个容器执行一些脚本命令,实现镜像发布后的一些关联操作;
Deploy :使用发布的镜像部署应用到 Kubernetes 等容器集群 PaaS 平台。
构建过程日志可以通过 Websocket 从 Cyclone-Server 拉取;构建结束后 Cyclone-Server 将构建结果和完整构建日志通过邮件通知用户。
软件架构
Cyclone 软件架构如下图所示。每个立方体代表一个容器。
Cyclone-Server 中 Api-Server 组件提供 Restful API 服务,被调用后需要较长时间处理的任务生成一个待处理事件写入 etcd ;
EventManager 加载 etcd 中未完成事件,监视事件变化,发送新增待处理事件到 WorkerManager 中; WorkerManager 调用 Docker API 启一个 Cyclone - Worker 容器,通过环境变量传入需要处理的事件 ID 等信息;
Cyclone-Worker 使用事件 ID 作为 token (有效期 2 小时)调用 API ,拉取事件信息依次启容器执行 integration 、 prebuild 、 build 、 post build ,完成后反馈事件执行结果,构建过程日志推送到 Log-Server ,转存到 Kafka ;
Log-Server 组件从 Kafka 拉取日志推送给用户;需要持久化的数据存入 Mongo 。
Cyclone 也可以多节点分布式部署,部署图如下所示。每一个立方体代表一个节点,使用 Haproxy 反向代理实现负载均衡和 SSL 数据加密,分发 API 请求到各 Cyclone 节点中。
Roadmap
Cyclone 由 Caicloud 工程师自主研发,并贡献给社区(地址: https://github.com/caicloud/cyclone )。 Cyclone 现已实现基本功能发布早期版本 V0.1 。我们计划在 2016 年 12 月底发布 V0.2 Kubernetes 版 Cyclone ; 2017 年第一季度发布 V0.3 提供 web 操作界面,后续还会开发用户权限管理,用户插件支持等功能。
扫描二维码进入到 Cyclone 社区
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.