您的位置:首页 > 运维架构 > Docker

基于 Docker 的 CI/CD 实践

2017-06-10 16:42 731 查看
基于 Docker 的 CI/CD 实践

Docker

Docker技术应用广泛,可以将软件与其依赖环境打包起来,以镜像方式交付,让软件运行在“标准环境”中。这一特性可以应用到持续集成中,实现原生支持容器云平台持续交付。本文将概述CI&CD;基本工作流程,软件整体框架以及实现原理。

Docker是一款基于LXC的容器引擎,自2013年开源以来,因为其易用性、高可移植性在开源社区非常火热。Docker将软件与其依赖环境打包起来,以镜像方式交付,让软件运行在“标准环境”中,这非常符合云计算的要求。各大IT巨头纷纷跟进,基于Docker容器技术创业公司也如雨后春笋,Docker创造了一个崭新的容器云行业。

Docker技术应用广泛。如,利用其隔离特性,为开发、测试提供一个轻量级独立沙盒环境进行集成测试。加速本地开发和构建流程,使其更加高效轻量化,开发人员可以构建、运行并分享容器,轻松提交到测试环境中,并最终进入生产环境。

CI

持续集成(Continuous integration,简称CI),是一种软件开发实践,即团队成员经常集成他们的工作,每次集成都需要通过自动化的构建,包括编译、发布、自动化测试来验证,从而尽早的发现集成错误。持续交付是指频繁地将软件新版本交付质量团队或者用户以供评审,如果评审通过,发布到生产环境。

优点

(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。

(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

CI&CD;基本流程

Circle提供丰富的rest API供Web应用调用;

通过API建立VCS与Circle服务关联后,VCS上的commit等动作会触发Circle构建;

VCS Provider组件从VCS拉取代码库中源码;

基于源码中配置文件CI配置启动需要的CI微服务容器进行集成测试;

集成测试通过后,进入Pre Build阶段在指定编译环境容器中编译可执行文件;

Build阶段中将可执行文件拷贝到指定运行环境容器中,打成镜像推送到Registry中;

Post build阶段会做一些镜像发布后的关联操作,比如推送运行依赖的静态资源文件到CDN中;

镜像发布后可以自动部署应用到Caicloud、Kubernetes、Mesos、Swarm等PaaS平台;

构建过程日志可以通过LogServer拉取;

构建结束构建结果可以发邮件通知用户。



整体框架

Circle整体框架如下图所示。Circle运行在容器中,与Kafka-ZooKeeper容器集群通信推送拉取构建过程日志,基础数据信息存储在mongo数据库容器集群中。在Circle内部:API Swagger组件提供在线Circle API说明帮助文档;API Server组件接收用户http请求,生成异步待处理事件记入Async Event Manager组件的事件队列中,并应答用户请求;Async Event Manager组件在检测到新的待处理事件创建后,根据事件具体操作类型调用CI&CD;组件提供的工具函数组装拼接成工作流水线,检测到事件完成后更新数据库中文档记录;在容器外运行一组Docker Daemon队列,各工作流水线独立使用一个Docker Daemon,以实现用户和事件隔离;CD&CD;组件会从Docker Daemon Queue中调度取出一个空闲Docker Daemon执行流水线任务,过程日志推送到Kafka指定的topic中;Log Server组件向用户提供一个获取日志的Websocket服务器,从Kafka拉取实时日志推送给用户。

Circle也可以多节点分布式部署,部署图如下所示。每一个立方体代表一个节点,使用Haproxy反向代理实现负载均衡和SSL数据加密,分发API请求到各Circle节点中。

参考链接

http://chuansong.me/n/810953051536
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  技术