DevOps--01--简介

软件开发的演变

多年来,DevOps从现有的软件开发策略/方法发展而来,以响应业务需求。让我们简要地看一下这些模型是如何演变的,以及它们最适合的场景。

DevOps--01--简介

DevOps--01--简介

传统瀑布模型

DevOps--01--简介

  • 瀑布模型为了保证整个软件可控,从而保证软件产品质量,对每个阶段进行管控,只有前一个阶段的输出稳定和质量过关后,才能进入下一个阶段
  • 这种模型在需求量相对简单和少的情况下,可以做到可控。但是随着社会的发展,各行各业对软件的依赖越来越大,各种复杂的业务都需要有软件的介入,复杂的业务场景,更短的开发周期,更频繁的业务场景变更,导致瀑布模型的开发模式无法保证有效和高质量的产品开发。

敏捷软件模型

敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的新型软件开发方法,是一种能应对快速变化需求的软件开发能力。

  • 更强调程序员团队与业务专家之间的紧密协作
  • 面对面的沟通(认为比书面的文档更有效)
  • 频繁交付新的软件版本
  • 紧凑而自我组织型的团队
  • 能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用。

在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

DevOps--01--简介
优点:

  • 敏捷开发的高适应性,以人为本的特性。
  • 更加的灵活并且更加充分的利用了每个开发者的优势,调动了每个人的工作热情。

缺点:

  • 由于其项目周期很长,所以很难保证开发的人员不更换,
  • 而没有文档就会造成在交接的过程中出现很大的困难。

敏捷开发scrum的实施

Scrum的英文意思是橄榄球运动的一个专业术语,表示“争球”的动作;把一个开发流程的名字取名为Scrum,相当于大家像打橄榄球一样迅速、富有战斗激情。而Scrum就是这样的一个开发流程。

Scrum开发流程中的三大角色

产品负责人(Product Owner)

  • 主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。

流程管理员(Scrum Master)

  • 主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。

开发团队(Scrum Team)

  • 主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每成员必须要有很强的自我管理能力,同时具有一定的表达能力;成员可以采用任何工作方式,只要能达到Sprint的目标。

scrum开发流程图

DevOps--01--简介
1、我们首先需要确定一个Product Backlog(产品需求列表),这个是由PO负责的(如图(一));

2、有了Product Backlog列表,我们需要通过 Sprint Planning Meeting(Sprint计划会议) 来从中挑选出一个Story作为本次迭代完成的目标,这个目标的时间周期是1~4个星期,然后把这个Story进行细化,形成一个Sprint Backlog;

3、Sprint Backlog是由Scrum Team去完成的,每个成员根据Sprint Backlog再细化成更小的任务(细到每个任务的工作量在2天内能完成);

4、在Scrum Team完成计划会议上选出的Sprint Backlog过程中,需要进行 Daily Scrum Meeting(每日站立会议),每次会议控制在15分钟左右,每个人都必须发言,并且要向所有成员当面汇报你昨天完成了什么,并且向所有成员承诺你今天要完成什么,同时遇到不能解决的问题也可以提出,每个人回答完成后,要走到黑板前更新自己的 Sprint burn down(Sprint燃尽图)(如图(二)和如图(三));

5、做到每日集成,也就是每天都要有一个可以成功编译、并且可以演示的版本。

6、当一个Story完成,也就是Sprint Backlog被完成,也就表示一次Sprint完成,这时,我们要进行 Srpint Review Meeting(演示会议),也称为评审会议,产品负责人和客户都要参加(最好本公司老板也参加),每一个Scrum Team的成员都要向他们演示自己完成的软件产品。

7、最后就是 Sprint Retrospective Meeting(回顾会议),也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮Sprint的产品需求中;

如图(一):

DevOps--01--简介

如图(二):
DevOps--01--简介

如图(三):

DevOps--01--简介

如图(四):

DevOps--01--简介

在敏捷开发中,已经将整个软件开发流程中的 需求->开发->测试三个环节囊括在内,指导这三个阶段的相关团队提升效率。

DevOps--01--简介

从上述的图中看到,在整个软件生命周期中的最后一个环节:部署没有被囊括进去,对于部署团队而言,输出件都是不被信任的(指输出质量)而DevOps就是想把最后这个环节也囊括到这个大循环中。
DevOps--01--简介
最终的目的是想让在这个循环中的各个阶段团队都对整个产品和整个交付过程负责,而不是只对某个阶段负责。

DevOps开发模型

什么是DevOps

DevOps(Development和Operations)的组合词
(过程、方法与系统的统称)

DevOps--01--简介

  • DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称.
  • 用于促进开发(应用程序/软件工程)技术运营质量保障(QA)部门之间的沟通、协作与整合。
  • 它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。

  • DevOps其实包含了三个部分:开发、测试和运维。

DevOps--01--简介

  • 换句话说,DevOps希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。专家们总结出了下面这个DevOps能力图,良好的闭环可以大大增加整体的产出。

DevOps--01--简介

DevOps 工具链

DevOps兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了 一大批优秀的工具,这些工具包括开发、测试、运维的各个领域,例如:GitHub、Git/SVN、Docker、Jenkins、 Hudson、Ant/Maven/Gradle、Selenium、QUnit、JMeter等。下图是DevOps相关的工具集:
DevOps--01--简介

  • 代码管理(SCM)GitHub、GitLab、BitBucket、SubVersion
  • 构建工具:Ant、Gradle、maven
  • 自动部署:Capistrano、CodeDeploy
  • 持续集成(CI):Bamboo、Hudson、Jenkins
  • 配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
  • 容器Docker、LXC、第三方厂商如AWS
  • 编排Kubernetes、Core、Apache Mesos、DC/OS
  • 服务注册与发现Zookeeper、etcd、Consul
  • 脚本语言python、ruby、shell
  • 日志管理:ELK、Logentries
  • 系统监控:Datadog、Graphite、Icinga、Nagios
  • 性能监控:AppDynamics、New Relic、Splunk
  • 压力测试:JMeter、Blaze Meter、loader.io
  • 预警:PagerDuty、pingdom、厂商自带如AWS SNS
  • HTTP加速器:Varnish
  • 消息总线:ActiveMQ、SQS
  • 应用服务器Tomcat、JBoss
  • Web服务器:Apache、Nginx、IIS
  • 数据库MySQLOracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
  • 项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

在工具的选择上,需要结合公司业务需求和技术团队情况而定。

DevOps--01--简介

DevOps生命周期

现在让我们看看DevOps生命周期,并探讨它们如何与下图所示的软件开发阶段相关联。

DevOps--01--简介

  • 持续开发
  • 持续测试
  • 持续集成
  • 持续部署
  • 持续监控

持续开发:

  • 这是DevOps生命周期中软件不断开发的阶段。与瀑布模型不同的是,软件可交付成果被分解为短开发周期的多个任务节点,在很短的时间内开发并交付。
  • 这个阶段包括编码和构建阶段,并使用Git和SVN等工具来维护不同版本的代码,以及An、Maven、Gradle等工具来构建/打包代码到可执行文件中,这些文件可以转发给自动化测试系统进行测试。

持续测试:

  • 在这个阶段,开发的软件将被持续地测试bug。对于持续测试,使用自动化测试工具,如Selenium、TestNG、JUnit等。这些工具允许质量管理系统完全并行地测试多个代码库,以确保功能中没有缺陷。在这个阶段,使用Docker容器实时模拟“测试环境”也是首选。一旦代码测试通过,它就会不断地与现有代码集成。

持续集成:

  • 这是支持新功能的代码与现有代码集成的阶段。由于软件在不断地开发,更新后的代码需要不断地集成,并顺利地与系统集成,以反映对最终用户的需求更改。更改后的代码,还应该确保运行时环境中没有错误,允许我们测试更改并检查它如何与其他更改发生反应。
  • Jenkins是一个非常流行的用于持续集成的工具。使用Jenkins,可以从git存储库提取最新的代码修订,并生成一个构建,最终可以部署到测试或生产服务器。可以将其设置为在git存储库中发生更改时自动触发新构建,也可以在单击按钮时手动触发。

持续部署:

  • 它是将代码部署到生产环境的阶段。 在这里,我们确保在所有服务器上正确部署代码。 如果添加了任何功能或引入了新功能,那么应该准备好迎接更多的网站流量。 因此,系统运维人员还有责任扩展服务器以容纳更多用户。
  • 由于新代码是连续部署的,因此配置管理工具可以快速,频繁地执行任务。 Puppet,Chef,SaltStack和Ansible是这个阶段使用的一些流行工具。
  • 容器化工具在部署阶段也发挥着重要作用。 Docker和Vagrant是流行的工具,有助于在开发,测试,登台和生产环境中实现一致性。 除此之外,它们还有助于轻松扩展和缩小实例。

持续监控:

  • 这是DevOps生命周期中非常关键的阶段,旨在通过监控软件的性能来提高软件的质量。这种做法涉及运营团队的参与,他们将监视用户活动中的错误/系统的任何不正当行为。这也可以通过使用专用监控工具来实现,该工具将持续监控应用程序性能并突出问题。
  • 使用的一些流行工具是Splunk,ELK Stack,Nagios,NewRelic和Sensu。这些工具可帮助密切监视应用程序和服务器,以主动检查系统的运行状况。它们还可以提高生产率并提高系统的可靠性,从而降低IT支持成本。发现的任何重大问题都可以向开发团队报告,以便可以在持续开发阶段进行修复。

这些DevOps阶段连续循环进行,直到达到所需的产品质量。下面的图表将显示可以在DevOps生命周期的哪个阶段使用哪些工具。

DevOps--01--简介
DevOps--01--简介

DevOps--01--简介

DevOps是一种态度和文化

DevOps--01--简介

DevOps另外一个好处就是会改善公司组织文化、提高员工的参与感。员工们变得更高效,也更有满足和成就感;调查显示高效员工的雇员净推荐值(eNPS:employee Net Promoter Score)更高,即对公司更加认同。

DevOps思想

企业文化就是一群人的做事风格,或者说是在做选择题,做决策的一种指导思想。而DevOps就是想提供一种有效的选择和指导思想。

  1. 统一目标而不是分割目标,DevOps的目的是想让整个软件开发生命周期中的所有环节都对结果负责,这里的结果是整体、业务或者商业上的结果,而不是割裂成若干个小环节的局部结果。而术业有专攻,每个阶段肯定是由若干个专业团队负责的,在管理流程上很容易的将每个团队分开管理考核,很容易导致团队之间的对立。因此需要在管理流程上对这个目标进行合理的引导(制度上),而不是去阻碍这种态度的形成。
  2. 预防大于治疗,基于上面一点,负责每个阶段的团队都需要多走出一步,向前一步,向后一步。这样才能弥补每个环节之间的间隙。而不是等到上一个环节出了问题之后再去返回去修改,这时追责的意义实际上已经不大。因此必须整个团队达成一致,是要主动迈出一步,而不是事后追责。才能形成一个有效的循环。
  3. 拥抱变化,软件开发是一个变化巨大的行业,需求、技术、甚至是人员本身都在快速的变化中,因此持续改进是应对变化的最有效的办法。快速发现问题,再快速解决问题。在团队统一目标,每个环节伸出左右手拉住上下游,形成一个车轮迅速往前推进。
  4. 另外,我想说下我理解的全栈工程师,不是一个人通吃整个开发的生命周期,当然刚开始可能是需要有几个一专多能的牛人构建出产品的雏形。但是只有融合不同的专才的团队才能让整个开发生命周期更长久,更稳定。而全栈指的是在目标统一的前提下,利用全局的思路去指导每个环节的研发工作。
  5. 很多人讨论是文化先行还是工具先行的问题,本人认为这不是一个串行关系,工具是一个自底向上的过程,在持续改进中积累。而文化需要一个自顶向下的过程,在演进到某个阶段,需要取得企业管理层的一致后,在公司导向,制度制定等方面向下推广。两个方向同时发展,才能取得比较好的效果。
上一篇:敏捷开发流程,您缺一个这样的协作平台


下一篇:记事本项目记录