基本概念

持续集成

(Continuous Intergration)

​ 持续集成的重点在于构建编译及测试,开发人员每天要提交很多次代码到分支,在分支合并到主干前,需要通过编译和测试识别出问题。持续集成的流程就是通过自动化的构建(主要是构建编译、自动化测试)来验证,从而尽早地发现集成错误。

持续集成的核心意义:通过自动化测试尽早的发现代码的问题。

持续交付

(Continuous Delivery):

​ 持续交付指的是将产品尽可能快的发布上线的过程。持续交付是在持续集成基础上的扩展,也就是说除了自动化编译、自动化测试,为了尽快上线我们还需要自动化发布流程,整个流程实现后,根据实际需要,可以周期性的进行产品上线发布,上线方式为人工点击部署实现快速上线。部署环境的先后部署顺序,一般在公司都是开发环境、测试环境、预发布环境(类生产环境)和正式生产环境,如果代码在预发布环境测试通过,那么就可通过手动的方式部署生产环境实现上线的目的。

持续交付的核心意义:尽快的将最终的产品发布到线上环境,给用户使用。持续交付是每个企业追求的目标,我们常说的CI/CD里的CD一般指的就是持续交付。

持续部署

(Continuous Deployment):

​ 持续部署就是在持续交付的基础上,将编译、测试、打包部署到生产环境的过程做成自动化。

​ 持续部署的核心意义:持续的将迭代的需求自动化的方式部署到生产环境。一般来说,非生产环境的持续部署基本都能实现。但生产环境的持续部署并不是每个企业都能做到,主要原因是受限于各种系统功能依赖、自动化测试不完善等因素,自动化一旦部署到生产,将可能造成严重生产事故。

说明:无论是持续集成、持续交付还是持续部署,如果要实现整个流程,基本上离不开CI服务器。

持续集成

特点

快速定位错误,测试环节可以及时暴露问题;避免大幅度偏离主干,借助统一的代码库;减少不必要的成本投入,可以自动化解决的重复乏味的事情,没必要浪费人力和时间;

工作流程

工作阶段

持续集成工作流程大体包括这么几个阶段:

初始化CI流程 基本的CI流程的配置,比如脚本、定时任务等。 拉取最新代码 从源码仓库拉取最新代码到构建服务器磁盘上。 构建 一般源码仓库自包含构建,可通过配置的脚本触发执行构建。比如Java的构建一般基于Maven或Gradle。 执行测试 测试阶段一般包含单元测试和集成测试。Java中的单元测试常指JUnit。 结果处理 CI流程执行的最后结果要么是成功,要么是失败,结果需要通知给对应的人员,一般的通知方式有邮件、钉钉、短信。

集成工具

Travis CI Bamboo TeamCity CircleCI Gitlab CI Jenkins

DevOps

概念

DevOps这个词,其实就是Development(开发)和Operation(运维)两个词的组合。

​ DevOps 不是一项技术,也不是一套流程和方法论,更不是一套简单的工具产品。DevOps的维基百科定义是这样的:DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营(运维)和质量保证(QA)部门之间的沟通、协作与整合。

​ 通过实践 DevOps,可以将开发、测试、运维之间的工作串联起来,以持续构建、自动化测试、持续发布为目标,将所有流程全部自动化,最大化减少了重复性的人力投入。同时,基础环境的自动化构建也降低了由于人的原因带来的意外风险。下图为DevOps所包含的流程:

​ DevOps 这个词是Patrick Debois 于2009 年创造的。出生于比利时的Patrick 先生曾经是一名苦闷的IT 咨询师,饱受开发和运维相互割裂及伤害之苦。2009 年他参加了一个技术大会,在会上听了名为10+ Deploys Per Day: Dev and Ops Cooperation at Flickr 的演讲,深受启发,并创造了DevOps 这个词。

​ 目前,DevOps处于高速增长的阶段。尤其是在大企业中,DevOps受到了广泛的欢迎。越大的企业,越喜欢DevOps。包括Adobe、Amazon、Apple、Airbnb、Ebay、Etsy、Facebook、LinkedIn、Netflix、NASA、Starbucks、Walmart、Sony等公司,都在采用DevOps。

工具链

​ 由于DevOps是一种跨职能的工作模式,因此实践过程需要使用不同的工具集(被称为 “工具链”),而不是单一的工具集。这些工具链应该符合以下一个或多个类别,这些类别反映了开发和交付过程中的关键环节:

编码—代码开发和审查、源代码管理工具、代码合并 构建—持续集成工具,构建状态 测试—持续测试工具,提供快速、及时的业务风险反馈 发布—变更管理、发布审批、发布自动化 配置—基础设施配置和管理,基础设施作为代码工具的基础设施 监控—应用性能监控、终端用户体验

DevOps生态圈工具链图:

常用工具

​ DevOps 需要要通过技术工具链完成持续集成、持续交付、用户反馈和系统优化的整合。工具链包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等。

版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go容器平台:Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible微服务平台:OpenShift、Cloud Foundry、Kubernetes、Mesosphere服务开通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat日志管理:Logstash、CollectD、StatsD监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kiban

DevOps的目标

更快的上市时间 提高部署频率 更短的修复时间 降低发布失败率 更快的平均恢复时间

总结来说DevOps的目标是最大限度地提高运营流程的可预测性、效率、安全性和可维护性。

小结

两者关系

由DevOps的流程和工具链我们可以得知,DevOps 是持续集成思想的延伸 持续集成/部署是 DevOps 的技术核心,在没有自动化测试、持续集成/部署之下,DevOps就是空中楼阁。

本文由传智教育博学谷教研团队发布。

如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。

转载请注明出处!

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: