文档章节

DevOps - 使SAAS持续交付

Mr-Bird-Lee
 Mr-Bird-Lee
发布于 2017/09/05 10:14
字数 1997
阅读 49
收藏 0

提到Devops我们不得不先切分一下Dev(开发)和Ops(运维)这两个角色。 在计算机产生早起,由于计算机使用范围的限制,硬件生产、软件开发及软硬件的维护都是来自相同的人员或团队,所以两个角色自然融合,本身就是一体的。 随着计算机使用领域和范围延入了各行各业,产品需求越来越复杂,人们更精细化的拆分了整个研发的生命周期,形成了更专注于开发测试的Dev角色和面向部署运维的Ops角色。

       如今为了更快速交付价值,传统瀑布式开发模型转型敏捷开发。同时一款优秀的产品通常也都是一个有规模的体系工程,需要产品、研发、测试、运维更和谐的团队沟通和更合理有效的配合流程,然而对开发团队的要求是通过快速实现新的功能交付价值,而运维团队则希望能提供给用户最稳定最可信任的生产环境,两个团队提供给用户的价值衡量指标不同,自然工作重点也不相同,这种矛盾也导致配合中出现了巨大的浪费。 为了缩小开发与运维之间存在着信息"鸿沟",能够更快地构建可靠性更高、质量更好的软件,DevOps的理念随之产生,它并不代表一个角色,一个资格或一个头衔,而是开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程和方法的一个集合、一种文化,也是从瀑布式到敏捷再到精益的发展必然。

       近年来中国企业应用采用SAAS模式已经是大势所趋。但产品生产过程中出现的种种问题:不一致的运行环境、过多的人工参与依赖构建和部署,改动引起不可控的质量,各个环节沟通和理解不到位等,导致了个人或团队经常出现工作中断,配合效率低下。所以如何结合SAAS和DevOps高效发展产品也将是大多数企业快速成长必然经历的过程。

  • 全局把握
    团队对DevOps有统一的认识和相同的思维方式,描绘愿景,使DevOps的目标清晰。各角色深入理解相互的工作内容,打破隔阂,比如Dev角色要清楚部署架构、部署流程;如何保障安全性和高可用性;对性能指标、压力情况和监控报警的结果更要作为工作重点。Ops角色也要对开发所使用的语言、框架、工具等有所了解,如何管理源码及分支、如何编译打包部署更要不仅仅接手命令的使用,要深入理解原理和过程,甚至Ops也要参与需求的技术评审,提出技术实现可能带来的运维风险。团队有了统一的思想并能及时沟通协作,有助于技术或工具的合理选型及应用, 制定统一的规范,标准化流程。
  • 代码和运行环境
    管理好源码和分支是研发团队保障信息安全、高效协作的基础。我们采用Git作为源码管理工具,并引入多年来业界总结出的Git使用最佳实践,也定义了适合自己的源码命名规则及版本号规范。更合理的branches为敏捷开发提供了高效运转的可行性,但也对各个branch的运行环境带来巨大的挑战。我们根据敏捷生命周期不同时期的要求,拆分了四套(Develop、Test、Staging、Production)运行环境。
    Develop主要给feature branches提供环境。一次敏捷迭代会完成多个(几个或几十个)新feature,每个feature都需要有单独的运行时来保证feature之间互不影响,开发和测试环境单纯,所以Develop环境是由多个运行时组成的,根据新feature数量来决定。我们采用docker技术将运行时容器化,开发人员完全可以依据需要随时产生一个运行时,并在使用完毕后销毁它。
    Test主要给develop branch提供环境。当一次迭代中某个新feature已经开发并测试完成,这个feature就可以将源码merge到develop branch上并进入下一周期——集成测试,Test就提供了一个或多个新feature集成环境。
    Staging是一套预发布环境。它和Production在环境配置方面保持高度一致,用户数据则是production环境中混淆脱敏的数据。在Test环境完成集成测试后发布Staging环境中进入性能、压力及数据完整性方面的测试,同时公司内部也是通过这个环境完成产品新功能的培训和体验的。
    Production是生产环境。提供给用户使用SAAS服务的最终环境。
  • 持续集成和自动化
    每一次源代码提交都应该立即构建、测试来验证功能并保证新代码的正确性及和旧代码是否能成功集成在一起,持续集成将整个过程快速不断的反馈和修正。要达到持续集成的能力,不单是管理好源代码,还需要更多的工具和准则:使用code style对源代码编写规范化;maven进行构建;利用nexus建立本地私服来对各种环境的编译和部署提供统一的依赖库。更重要的是面对如此复杂多样的环境过多的人工参与会使出错的几率大大提升,为了降低浪费,我们要将各个环境尽可能的自动化:构建部署自动化、测试自动化(自动化单元测试、自动化集成接口测试、自动化功能测试),使用jenkins来建立jobs将所有的自动化环境串联起来。我们对Develop和Test环境设置了持续集成规则,任何feature branch代码的提交将触发jenkins一系列jobs的执行,检查、构建、测试最终部署到指定的docker容器中;同样Test环境每天早上从develop branch上检测出变更的代码进入jobs,自动化完成各个粒度的测试。当然持续集成过程中任何问题都会邮件通知给相应的人员处理。
  • 持续交付
    交付成果给客户使用时每次迭代的目标,在持续集成的基础上,将集成后的代码部署到真实运行环境中,使得交付物尽早的得到验证和反馈,无论输出的好坏都是有价值。持续的交付可以不堆积问题马上调整,也为产品下一次迭代提供优化的空间。
  •        计算机领域新概念都是在面临之前的困境和挑战中孕育而生的,这些概念不仅是人类经验积累和智慧的结晶,也为行业提供了统一的新思想和解决方案。如今DevOps已经离我们不再遥远,正是革新团队尝试新理念的好时机。IT服务能力在今天已经成为企业的核心竞争力,为了在激烈的市场竞争中占有优势,研发团队甚至整个公司都应该作出快速并积极的响应。也许在实践中还要结合实际进行探索和试错,但我们坚信只要方向正确,就要坚持走下去。

© 著作权归作者所有

共有 人打赏支持
Mr-Bird-Lee
粉丝 1
博文 22
码字总数 33438
作品 0
海淀
程序员
【干货合集】从菜鸟到老司机,20篇文章带你了解DevOps!

如今,虽然业内还并未对DevOps的定义达成共识。但是几乎每个行业机构和组织都制定了一套自己的DevOps实践。他们以为只要进行自动化、配置管理和敏捷开发,就算是真正意义上了解并实践了DevOp...

林一木
05/14
0
0
火热的云原生到底是什么?一文了解云原生四要素!

来源:51CTO、网易、Pivotal 物联网智库 整理发布 摘要:所谓云原生,它不是一个产品,而是一套技术体系和一套方法论,而数字化转型是思想先行,从内到外的整体变革。更确切地说,它是一种文...

人工智能学家
09/21
0
0
活动干货|基于Docker的DevOps实现

作者:精灵云 众所周知,传统开发模式已经面临了诸多难题。首先,在代码集成方面,因为没有合适粒度的代码合并,大规模的合并会有很大的风险,且传统开发模式中没有自动化测试,以至于测试周...

精灵云
2017/03/16
0
0
什么样的持续交付工具和平台最适合你的组织?

持续交付和DevOps的方法论及实践已经存在很很多年,其主要要解决的问题就是,如何快速,安全的完成从开发到发布、运维,及后续的线上监控等一系列活动。 持续交付和DevOps包含了很多内容,比...

猫耳m
05/02
0
0
基于Docker的DevOps实现

本文根据DBAplus社群第96期线上分享整理而成。 主题简介: 1、传统开发模式的问题分析 2、DevOps的完成流程详解 3、基于Docker的DevOps实现步骤详解和案例分享 一、传统开发模式的问题分析 ...

乔融
2017/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android JNI开发系列(十三) JNI异常处理

JNI 异常处理 JNI异常与JAVA处理异常的区别 JAVA 有异常处理机制,而JNI没有 如果JAVA中异常没有捕获,后面的代码不会执行,JNI会执行 JAVA编译时的异常,是在方法显示的声明了某一个异常,编...

蔡小鹏
32分钟前
1
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

Linux就该这么学
57分钟前
1
0
Qt那些事0.0.7

在帮助文档(Overview - QML and C++ Integration)中随缘遇到一张图,是关于C++对象与QML整合介绍的,值得标记下来,虽然大部分功能也有所涉猎,但是还是留个记号,万一哪天我失忆了还想写Q...

Ev4n
今天
0
0
快速幂运算

题:求一个数 data 的 n 次幂,要求时间复杂度为log(n) 1:递归算法: /** * x^3=(x^2)*x;x^7=(x^3)^2 * x * * 递归算法 * @param data 底数 * @param n 次...

偶尔诗文
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部