CI/CD和 DevOps还在傻傻分不清吗?今日一文让你通透
Posted 博学谷狂野架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI/CD和 DevOps还在傻傻分不清吗?今日一文让你通透相关的知识,希望对你有一定的参考价值。
基本概念
持续集成
持续集成的重点在于构建编译及测试,开发人员每天要提交很多次代码到分支,在分支合并到主干前,需要通过编译和测试识别出问题。持续集成的流程就是通过自动化的构建(主要是构建编译、自动化测试)来验证,从而尽早地发现集成错误。
持续交付
持续交付指的是将产品尽可能快的发布上线的过程。持续交付是在持续集成基础上的扩展,也就是说除了自动化编译、自动化测试,为了尽快上线我们还需要自动化发布流程,整个流程实现后,根据实际需要,可以周期性的进行产品上线发布,上线方式为人工点击部署实现快速上线。部署环境的先后部署顺序,一般在公司都是开发环境、测试环境、预发布环境(类生产环境)和正式生产环境,如果代码在预发布环境测试通过,那么就可通过手动的方式部署生产环境实现上线的目的。
持续部署
持续部署就是在持续交付的基础上,将编译、测试、打包部署到生产环境的过程做成自动化。
持续部署的核心意义:持续的将迭代的需求自动化的方式部署到生产环境。一般来说,非生产环境的持续部署基本都能实现。但生产环境的持续部署并不是每个企业都能做到,主要原因是受限于各种系统功能依赖、自动化测试不完善等因素,自动化一旦部署到生产,将可能造成严重生产事故。
说明:无论是持续集成、持续交付还是持续部署,如果要实现整个流程,基本上离不开CI服务器。
持续集成
特点
- 快速定位错误,测试环节可以及时暴露问题;
- 避免大幅度偏离主干,借助统一的代码库;
- 减少不必要的成本投入,可以自动化解决的重复乏味的事情,没必要浪费人力和时间;
工作流程
工作阶段
-
初始化CI流程
基本的CI流程的配置,比如脚本、定时任务等。
-
拉取最新代码
从源码仓库拉取最新代码到构建服务器磁盘上。
-
构建
一般源码仓库自包含构建,可通过配置的脚本触发执行构建。比如Java的构建一般基于Maven或Gradle。
-
执行测试
测试阶段一般包含单元测试和集成测试。Java中的单元测试常指JUnit。
-
结果处理
CI流程执行的最后结果要么是成功,要么是失败,结果需要通知给对应的人员,一般的通知方式有邮件、钉钉、短信。
集成工具
-
Travis CI
-
Bamboo
-
TeamCity
-
CircleCI
-
Gitlab CI
-
Jenkins
DevOps
概念
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 需要要通过技术工具链完成持续集成、持续交付、用户反馈和系统优化的整合。工具链包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等。
- 版本控制&协作开发: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就是空中楼阁。
以上是关于CI/CD和 DevOps还在傻傻分不清吗?今日一文让你通透的主要内容,如果未能解决你的问题,请参考以下文章