从项目开发到云端架构 6

2017-11-27 14:44:39 134

2.3 敏捷前行

       当软件行业进入互联网时代,市场对软件产品和服务的交付提出了更高的要求:不仅要快速实现需求,而且要快速发布上线,并且必须保证业务可靠、高效运行。为了满足这些要求,IT组织需要强有力的流程、技术和人员作为保障。

       敏捷从阶段上可以分为敏捷开发和敏捷部署,如果把开发和部署关联起来,实现最后1公里的软件历程,那也就是devops的初衷,敏捷与DevOps的实质是同一种思想,一种高效组织企业运作并产生价值的思想。敏捷的价值在:及时响应需求变化,高效地组织进行软件开发,快速交付;DevOps的价值在:与开发统一节奏,将开发交付的软件或版本及时部署获得回报,中旬中心思想:强调端到端的一气呵成,消除部门墙,降低内耗,降低成本,快速回报。敏捷侧重于市场与开发间的配合,DevOps则注重开发与运维间的无缝衔接。

 

2.3.1            敏捷开发

       DevOps与敏捷软件开发同样具有精益的指导思想,在实践层面也有很多共通之处。可以把敏捷看作精益思想在需求和研发阶段的实施;DevOps则是在发布、运营阶段的实施。尽管建设DevOps能力并不必须要求软件组织具备敏捷软件开发能力,不过以下敏捷实践会对DevOps能力建设产生尤为明显的帮助:


  • 迭代开发:开发团队需要融入快速交付的整体节奏。

  • 自动测试:在软件生命周期的各个环节保障系统质量,避免引入缺陷。

  • 持续集成:拥有成熟的项目自动化机制和能力,开发团队能帮助运营团队更快地建立发布与维护过程的自动化体系,从而实现软件价值的持续交付。

 

2.3.2            敏捷运维

       在许多方面,DevOps是一个集合性概念,指的是能够理顺开发和运维之间相互配合关系的任何事物。所谓[软件开发的]“最后一公里”,是指软件满足了功能需求之后,尚未投入实际运行并创造业务价值的阶段。软件开发者──尤其是面对交付压力的软件开发者──常常对“最后一公里”视而不见。但它确实正在成为业务软件交付中最大的压力点。

 

快速响应

       传统观念中规模庞大、发布周期长达数月乃至数年的软件产品研发方式正在发生变化。在“快鱼吃慢鱼”的互联网时代,上市时间(Time To Market)成为衡量软件组织能力的重要因素:能快速接纳需求、快速完成开发、快速上线投入使用的软件产品,才能有效占领市场、吸引用户。

 

质量

    大型软件组织通常都很重视产品质量,并在开发/测试阶段投入大量成本与精力进行质量保障活动。但软件产品的质量问题不仅在开发阶段引入,靠传统意义上的测试工作也不能完全发现。有相当比例的质量问题是在开发/测试阶段之后引入或发现的。造成这一现象的原因有:


  • 开发人员对生产环境缺乏了解,在代码中引入了只有在生产环境才会暴露的缺陷。

  • 开发人员对非功能性需求缺乏关注,并且没有相应验证环境,导致非功能性缺陷。

  • 生产环境和测试环境缺乏有效管理,因为环境差异引入缺陷。

  • 部署和维护工作缺乏自动化,在发布过程中手工操作引入缺陷。

  • 缺乏针对生产环境的回归测试,导致缺陷不能及时被发现。

 

    通过引入自动化测试、测试驱动开发、持续集成等敏捷实践,开发/测试阶段的质量保障活动能够得到有效改善。然而对于客户和最终用户来说,不论哪个环节引入的缺陷都同样会给业务造成损失。如何在部署上线的紧迫压力下保证质量,这也是众多软件组织领导者关注的一个问题。

       DevOps是一组流程、技术与工具的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合。“DevOps”这个名称即是指开发(dev)与运营(op)的无缝融合。具备DevOps能力的组织能够开展快速、反应灵敏同时又稳定可靠的业务运维,使其能够与开发过程的创新保持同步,从而使得敏捷开发的优势在组织层面上得到展现。

 

 

       DevOps的指导思想是“精益运维”。精益生产的很多原则,例如缩短交付周期、消除浪费、重视价值流动、拉动式生产、质量内建等,在DevOps中都得到了体现。与传统的软件发布方式相比,DevOps主要通过以下几方面的改变来提升效率和质量:

 


  • 减少每次发布的变更范围。与传统的瀑布式开发模型相比,采用迭代的工作方式意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长(如图2)。与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,具备DevOps能力的组织大大提升了发布频率(通常以“天”或“周”为单位)。

  • 加强开发与运营协调。通过强有力的发布协调机制来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电话会议、即时消息、企业门户(wikisharepoint)等协作工具来确保所有相关人员理解变更的内容;使用统一的流程和工具,例如故事墙、燃尽图、在线项目管理工具( 例如MingleJIRA)、配置管理工具(例如SubversionGitMercurial)等。

  • 自动化。借助强大的部署自动化手段和标准化的环境管理来降低部署操作的成本、确保部署任务的可重复性、减少部署出错的可能性。例如:

    • VMWareXen等虚拟化技术标准化生产环境,实现生产环境的快速复制和快速恢复。

    • PuppetChef等工具自动化环境设置、软件安装/配置等操作,将配置信息转化为源代码,实现环境配置的版本控制。

    • Capistrano等工具自动化软件产品的部署,实现部署过程的版本控制。

    • dbdeploy等工具自动化数据库变更,实现数据迁移的版本控制。

    • SeleniumCucumber等工具自动化生产环境的冒烟测试和回归测试。

 

       从工作流程、协调机制、技术工具等几个方面同时着手,就能在软件组织中建立起DevOps能力,从而将精益运维变成现实。

 

2.3.3          Devops

要想实现DevOps相关解决方案,以下三方面需要关注:

 

1、评价和鼓励改变文化

改变文化和激励系统从来不是一件易事。但是,如果你不改变企业文化,兑现DevOps的承诺将非常困难。考察一个企业的主导文化时,你需要紧密关注如何评价和判断企业业绩。评价的内容将影响和刺激行为的发生。开发-运维生命周期中的所有当事方需要明白,在更大的企业流程中自己只是其中一部分。个体和团队的成功都要放在整个开发-运维生命周期内来进行评价。对于许多机构来说,这是一个转变,不再是孤立的来进行业绩评价,每一个团队不再是基于自己的团队来评价和判断业绩好坏。

2、统一标准化的流程

这是DevOps的一个重要主题,整个开发-运维生命周期必须被看作一个端对端过流程。流程的不同阶段可以采取不同的方法,只要这些流程可以被组合到一起创建一个统一的流程。与评价和激励的问题相似的是,实现这个统一的流程时每个组织可能会有略微不同的需求。

3、统一的工具

这是大多数DevOps讨论一直在关注的领域。这一点不令人吃惊,因为当技术专家在考虑解决一个问题时,第一反应往往就是直接跳转到工具讨论上。如果你关注PuppetChefControlTier等工具社区,那么你可能已经意识到人们对在开发和运维工具之间建立桥梁的重大关注。“基础设施即代码(Infrastructure as code)”、“模型驱动自动化(model driven automation)”和“持续性部署(continuous deployment)”都是可以划归DevOps旗下的概念。

 

 

       DevOps具有相同理念的术语很多,例如敏捷运维(Agile Operations)、敏捷基础设施(Agile Infrastructure)和Dev2Ops。还有很多人虽然没有提及“DevOps”,但却在遵循着类似的理念。

 

 


矽控物联
 

23-01Devops平台

 

 

2.3.4          每日构建

       持续集成是指在开发阶段,对项目进行持续性自动化编译、测试,以达到控制代码质量的手段,提供了及时发现问题、追踪问题、修复问题的机制,持续集成强烈依赖单元测试。Jendins/hundson是一款轻量/易扩展/易配置的持续集成平台,对maven2有良好的支持,扩展插件丰富,包括findbug,PMD静态分析插件、emma单元测试覆盖率插件、junit测试报告插件等。

 

持续集成主要在以下方面提供好处:


  • 持续自动化测试(持续集成可通过时间间隔触发,或其他方式触发)

  • 跟踪工程健康状况

  • 强制性单元测试用例,验收测试用例等

  • 静态代码检测,生成测试报告

 

 


矽控物联
 

23-02:持续集成工具

 

Maven 打包

       Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。   

       Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。   

       此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

来源:timeson http://timeson.iteye.com/blog



矽控物联

矽控电子核心团队拥有十余年的硬件正向研发,生产制程,测试手法,品质控制经验。尤其擅长嵌入式ARM平台的工控物联网产品,以及海思平台的IPC视频类模组开发,为您的产品从创意到落地、批量市场化助力。公司可提供从硬件设计(原理开发及PCB Layout),PCB制板,SMT及接插件焊接,产品测试,产品老化全流程外包服务,收费合理,品质可靠。

垂询电话:0510-83488567-1     业务邮箱:wxdianzi#foxmail.com (#更换为@)