随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发—测试—发布)模式已经不能满足快速交付的需求。2009 年左右 DevOps 应运而生,开发运维一体化,通过自动化工具与流程让整个软件开发构建、测试、发布更加快捷、频繁、高效和可靠。

本系列教程目录

本系列将详细讲解Devops落地细节。将构建整个持续集成与交付的一整套体系与流程。对于未来要开篇的系列博文列表如下:

【DevOps】团队敏捷开发系列(一)--开山篇
【DevOps】团队敏捷开发系列(二)--版本控制之道Git
【DevOps】团队敏捷开发系列(三)--代码管理之道Gitlab
【DevOps】团队敏捷开发系列(四)--前后端分离契机Swagger
【DevOps】团队敏捷开发系列(五)--代码编译MAVEN
【DevOps】团队敏捷开发系列(六)--自动化CI工具Jenkins
【DevOps】团队敏捷开发系列(七)--自动化流程编排
【DevOps】团队敏捷开发系列(八)--自动化单元测试Junit
【DevOps】团队敏捷开发系列(九)--自动化性能压测Jmater
【DevOps】团队敏捷开发系列(十)--持续部署流程编排
【DevOps】团队敏捷开发系列(番外篇)--Linux常用命令

相关概念解释

DevOps 概念

Ops"是一个总括术语,泛指系统工程师、系统管理员、操作人员,发布工程师、DBA、网络工程师、安全专家和各种其他分支和头衔。"Dev"是开发人员的简称,但真正在实践中意味着更广泛的"参与开发的产品"的所有人,可包括产品,质量保证,和其他种类的学科。

DevOps 发展

DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。 从2009年起,相关的工作组、专业组织和博客快速涌现。

自动化概念

自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人的要求,经过自动检测、信息处理、分析判断、操纵控制,实现预期的目标的过程。自动化技术广泛用于工业、农业、军事、科学研究、交通运输、商业、医疗、服务和家庭等方面。采用自动化技术不仅可以把人从繁重的体力劳动、部分脑力劳动以及恶劣、危险的工作环境中解放出来,而且能扩展人的器官功能,极大地提高劳动生产率,增强人类认识世界和改造世界的能力。因此,自动化是工业、农业、国防和科学技术现代化的重要条件和显著标志。

DevOps自动化

全面自动化 —— 部署、 升级、 扩展、 维护、 数据、 测试、 监测、 安全和策略管理。在自动化方面投入巨资,目标是100%的自动化,不考虑低于90%的可能性。但是,全面自动化也可能会引起自动化泛滥。集中审查和调整可以控制Chef或Puppet脚本库的无序增长。
DevOps战略必须获取本组织自顶向下的全面支持。整个行政领导团队 ——不只是首席信息官 ——应知道它为什么重要和怎样使它取得成功。

为什么DevOps

为什么我们采用DevOps,首先来看一下传统的开发运维模式。

传统开发模式

首先,开发人员开发完毕,并进行简单自测,和 手动 功能测试。
其次,开发人员利用IDE 手动 打包。
然后,将构建后的文件 手动 复制到公网服务器指定目录。
最后,启动程序并进行手工测试。
很明显,在这个过程中,有太多重复性的东西,会严重影响团队效率。

自动化方案

我们可以简单的来将我们的系统优化,最终形成强大的自动化敏捷体系。

自动化单元测试

我们可以通过一些自动化平台例如jenkins 进行自动化单元测试的集成。可以很高效的对整个开发进行系统的单元测试,简化测试流程,提升测试效率

自动化打包构建

通过一些列的代码与版本控制管理工具,例如Git与Gitlab可以非常有效的管理代码、版本、分支、标签等等。当然不仅于此,还有很多比较优秀的工具供我们使用。但是目前市场最流行的当属Git与Gitlab体系。

自动化发布

针对于后端服务用Java开发的应用程序,我们大可以使用MAVEN或者Gradle进行统一的依赖管理及代码编译打包控制。可以通过一些列Wiki进行配置触发器,集成到jenkins等工具上,然后进行自动化的远程节点打包。当然可以在jenkins建立多个节点去持续多点出发集成。

自动化部署

通过强大的shell命令,让我们可以在每个服务器、每一个环境当中,自由穿梭。对于自动化部署,需要按照实际需求,编写不同的shell脚本,然后将相关流程进行配置,结合jenkins等工具,可以快速实现每一个环节的发布。

DevOps团队需要做什么

DevOps团队执行各种任务, 如:
1. 新虚拟服务器的配置
2. 配置网络设备
3. 应用程序部署
4. 收集和聚合的日志
5. 性能监视服务
6. 报警和自动修复的问题
7. 服务器和服务可用性监控

DevOps团队工具

工具名称 工具用途
Docker 虚拟化容器技术,快速构建独立隔离服务
Jenkins 自动化平台,可以配置自动化测试与持续部署
New Relic 应用性能监测
Ansible 自动化(配置管理工具)平台,持续集成与编排
Kubernetes 开源的docker编排工具,可以发布与回滚
JMeter 基于Java的压力测试工具。用于对软件做压力测试

还有很多工具可以使用,这个具体我们后续慢慢讲来。

番外篇

除了一整套DevOps的体系,我们会在整个系统当中,穿插讲解Docker容器的使用。对于我们很多时候遇到的依赖或者安装流程复杂的问题,都可以容器的方式快速解决,并且可以快速启动或销毁多个服务。

未尽之处将会在系列博文中详细说道。本文只是对系列博文的概要说明,本文也参考了互联网很多资料整理所得。

源码

本文出处:http://www.hanyahong.com/
(欢迎转发、请注明出处!)

【DevOps】团队敏捷开发系列--开山篇的更多相关文章

  1. 【转载】Android Metro风格的Launcher开发系列第二篇

    前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如 ...

  2. DEVOPS 运维开发系列

    DEVOPS 运维开发系列四:ITIL事态管理流程.事态监控系统设计以及基于Devops的效率提升实践 - watermelonbig的专栏 - CSDN博客https://blog.csdn.net ...

  3. 敏捷开发系列之旅 第二站(走近XP极限编程)

    http://blog.csdn.net/happylee6688/article/details/21551065 上篇文章,我们探讨了什么是敏捷开发,以及敏捷开发的方法学.在这篇文章中,我们将继续 ...

  4. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  5. 微信小程序购物商城系统开发系列-工具篇

    微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将 ...

  6. DevOps之敏捷开发

    初步了解一下敏捷开发及其流程 1 为什么要敏捷开发? 敏捷开发描述了一套软件开发的价值和原则,在这些开发中,需求和解决方案皆通过自组织跨功能团队达成. 1.1 背景与动机 当需求的不明确性和工程实现的 ...

  7. [转载] Android Metro风格的Launcher开发系列第一篇

    前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...

  8. chromium浏览器开发系列第二篇:如何编译最新chromium源码

    说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1. ...

  9. Android Metro风格的Launcher开发系列第一篇

    前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...

随机推荐

  1. Leftmost Digit

    Problem Description Given a positive integer N, you should output the leftmost digit of N^N.   Input ...

  2. sed基本常用命令

    sed的基本操作 sed 's/a/b/g' 文件a 把文件a中的a修改成b 注意这只是临时的 注:s就是所有的意思,g是缓存区的意思 sed -i 's/a/b/g' 文件a 把文件a中的a修改成b ...

  3. 解决打开MATLAB时出现“Waring:could not read file classpath.txt”,等问题

    估计刚安装好的matlab是不会出现这个问题的,出现问题肯定是在某一次用360或者电脑管家清理垃圾之后才会出现这个问题. 首先声明我的matlab版本是matlab R2014a,下载链接:(额,网盘 ...

  4. AngularJS学习篇(二十二)

    AngularJS 依赖注入 什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或 ...

  5. JavaScript instanceof 运算符深入剖析【转载】

    http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/   instanceof 运算符简介 在 JavaScript ...

  6. Ajax 跨域 异步 CORS

    HTTP access control (CORS) 核心在于使用定制(添加新的header)HTTP header让浏览器和服务器有更多的相互了解,从而决定一个请求或者响应成功还是失败   对于一个 ...

  7. Python 解LeetCode:367. Valid Perfect Square

    题目描述:给出一个正整数,不使用内置函数,如sqrt(),判断这个数是不是一个数的平方. 思路:直接使用二分法,貌似没啥好说的.代码如下: class Solution(object): def is ...

  8. ML技术 - 特征选择

    1. 决策树中的特征选择 分类决策树是一种描述对实例进行分类的树型结构,决策树学习本质上就是从训练数据集中归纳出一组分类规则,而二叉决策树类似于if-else规则.决策树的构建也是非常的简单,首先依据 ...

  9. Lucene搜索引擎例子demo

    一.导入相应的jar包 KAnalyzer3.2.0Stable.jar lucene-analyzers-3.0.1.jar lucene-core-3.0.1.jar lucene-highlig ...

  10. Lucene全文检索引擎

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...