持续集成(Continuous Integration)是一种软件开发实践,在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括静态扫描、安全扫描、自动测试等过程)的检验,以尽快发现集成错误。许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。
——Martin Fowler
持续交付是指频繁地将软件的新版本交付给质量团队或者用户,以供评审,如果评审通过,代码就进入生产阶段。
持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境中。
通过自动化的持续集成,把管理流程固化;保证集成的有序性、可靠性;减少版本发布的不合规性(开发或者测试手动打包,可能一天打多个包,更新多次,测试不充分),保证版本可控,问题可追溯。持续集成工具中Jenkins使用最为广泛。
大规模CI/CD容易出现的问题:
- 更新问题
- 部署包(jar包、war包、ear包等)的管理问题
- 版本安全性
- 主机管理问题
- 端口管理问题
- 负载均衡管理问题
- 服务伸缩问题
- IP管理问题
虚拟化、云平台化为大规模部署提供了方便,以Docker为代表的容器化技术出现后,云变得更灵活,容器化已成为大潮。
Docker容器技术让应用一次构建,到处(物理机、虚拟机、公有云、私有云、Windows系统、Linux系统等)可运行,加快了本地开发和构建,实现了快速交付和部署;同时还可以在操作系统层面提供资源隔离服务。
支持Docker容器管理的工具使用得比较广泛的有Swarm、Mesos、Kubernetes、Rancher等工具,其中Kubernetes影响最大,但学习与运维成本相对较高,目前主要是国内大型互联网公司在用,包括BAT、京东等企业,腾讯的蓝鲸(DevOps)也基于Kubernetes,已经开始市场化。
代码版本管理工具GitLab
GitLab是基于Ruby On Rails开发的Git项目仓库,类似于GitHub,但是相比较而言,它支持在自己的内网服务器上搭建配置。