1

CI/CD和 DevOps还在傻傻分不清吗?今日一文让你通透

 1 year ago
source link: https://blog.51cto.com/boxuegu/5682990
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

CI/CD和 DevOps还在傻傻分不清吗?今日一文让你通透

精选 原创

博学谷狂野架构师 2022-09-16 14:53:14 博主文章分类:技术干货 ©著作权

文章标签 后端 java 文章分类 其它 系统/运维 yyds干货盘点 阅读数158

CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_java

(Continuous Intergration)

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

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

CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_ci/cd_02

(Continuous Delivery):

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

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

CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_后端_03

(Continuous Deployment):

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

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

CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_后端_04

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

  • 快速定位错误,测试环节可以及时暴露问题;
  • 避免大幅度偏离主干,借助统一的代码库;
  • 减少不必要的成本投入,可以自动化解决的重复乏味的事情,没必要浪费人力和时间;
CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_后端_05

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

  • 初始化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所包含的流程:

CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_ci/cd_06

​ 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生态圈工具链图:

CI/CD和  DevOps还在傻傻分不清吗?今日一文让你通透_后端_07

​ 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就是空中楼阁。

本文由育博学谷狂野架构师发布
如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力
转载请注明出处!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK