原文出处:https://www.cnblogs.com/beef/p/7743594.htmlhtml
【DevOps】团队敏捷开发系列--开山篇web
https://www.cnblogs.com/hyhnet/p/8082390.htmldocker
如今DevOps已经成为发展的趋势了,那它又是怎么实现落地的呢?浏览器
落实DevOps的指导思想安全
首先咱们仍是要回到什么是DevOps,若是你们忘记了能够回到以前再温故一下,包括我总结的DevOps公式。服务器
其实DevOps核心思想就是:“快速交付价值,灵活响应变化”。其基本原则以下:网络
高效的协做和沟通;数据结构
自动化流程和工具;架构
快速敏捷的开发;并发
持续交付和部署;
不断学习和创新。
然而这些基本原则又是如何与项目研发息息相关的呢,也就是它们在咱们的开发过程当中的各个环节是如何体现的?请看下面一张来自《success with enterprise dev-ops - whitepaper》的介绍图:
敏捷管理:一支训练有素的敏捷开发团队是成功实施DevOps的关键。
根据康威定律:软件团队开发的产品是对公司组织架构的反映。
因此根据公司状况调整组织结构是首要条件,它将直接影响到需求、设计和开发阶段的效率、以及沟通的成本。
关于团队的沟通成本在《人月神话》中有个很好的计算公式:沟通成本 = n(n-1)/2,其中n为人数,因此沟通成本将随着组织人员的增长而呈指数级增加。而小而快的敏捷团队如何划分,我将在后面“DevOps的具体实施方法”一节中详细介绍。
持续交付部署:实现应用程序的自动化构建、部署、测试和发布。
经过技术工具,把传统的手工操做转变为自动化流程,这不只有利于提升产品开发、运维部署的效率,还将减小人为因素引发的失误和事故,提前发现问题并及时地解决问题,这样也保证了产品的质量。下图展现了DevOps自动化的流程:
此图来自个人新书《分布式服务架构:原理、设计与实战》,书中也有具体介绍持续交付部署的细节内容。
IT服务管理:可持续的、高可用的IT服务是保障业务正常的关键要素,它与业务是一个总体。
IT服务管理(ITSM)直接影响产品运营的整个生命周期,传统的IT服务管理(像ITIL)在生产中作的很是好了,可是它对于DevOps来讲又显得过于繁琐,因此有必要为DevOps建立一个只关注业务持续性的ITMS,它只须要不多的必要资源来为相应的业务提供服务,ITMS更多地从业务角度考虑了。
注:白话解释下什么是IT服务管理(ITSM),它是传统的“IT管理”转向为“IT服务”为主的一种模式,前者可能更关注具体服务器管理、网络管理和系统软件安装部署等工做;然后者更关注流程的规范化、标准化,明肯定义各个流程的目标和范围、成本和效益、运营步骤、关键成功因素和绩效指标、有关人员的责权利,以及各个流程之间的关系等,好比创建线上事故解决流程、服务配置管理流程等;
而光有流程还不够,由于流程主要是IT服务提供方内部使用的,客户对他们并不感兴趣,因此还需将这些流程按需打包成特定的IT服务,而后提供给客户使用,好比在云平台上购买一台虚拟云主机同样。
精益管理:创建一个流水线式的IT服务链,打通开发与运维的鸿沟,实现开发运维一体化的敏捷模式。
精益生产主要来源于丰田生产方式 (TPS)的生产哲学,它以下降浪费、提高总体客户价值而闻名,它主要利用优化自动化流程来提升生产率、下降浪费。因此精益生产的精髓是即时制(JIT)和自动化(Jidoka)。
JIT(Just In time):JIT用一句话描述就是消耗最少的必要资源,以正确的数量,生产和运送正确的零件。在这种模式下工做,能够最大程度上下降库存,防止过早或者过分生产。大多数公司更倾向用库存来避免潜在的停线风险,而丰田却反其道而行之。经过减小库存“逼迫”对生产中产生的问题作及时且有效的反应。固然JIT这一模式对解决问题的能力是至关大的考验,在能力不足的状况下,会有至关大的断线风险。
Jidoka(Build in quality):自动化,日语表示为“自働化”,字面含义是自动化,日语里表示为“自動化”,而在丰田TPS系统里,特地给“動”字加上了“人”字旁变成了“働”,换句话说,TPS/精益生产渴望生产的过程控制能像“人”同样智能,在第一时间就异常状况下自动关闭。这种自动停机功能能够防止坏件流入下游,防止机器在错误的生产状态下形成损坏,也可让人更好的在当前错误状态下进行故障分析。当设备可以作到自动分析故障时,就能够将监管机器的“人”真正解放出来,作到对人力成本的节省。
——来自知乎
下图展现了丰田TPS(Toyota Production System)手册中的精益小屋:
而精益软件开发是精益生产和实践在软件开发领域的应用,总结为以下七条原则:
消除浪费
加强学习
尽可能延迟决定
尽快发布
下放权力
嵌入质量
全局优化
精益管理贯穿于整个DevOps阶段,它鼓励主动发现问题,不断的优化流程,从而达到持续交付、快速反馈、下降风险和保障质量的目的。接下来让咱们看看DevOps具体的实现方法。
DevOps的思想先进、理念完美,是目前为止我以为最好的解决方案,不过DevOps最终可以落地,很大程度上仍是归功于它有一整套的技术和开源工具。接下来让咱们一块儿看看DevOps想着的技术栈吧。
本节内容若是展开的话涉及太多,我将概略地为你们介绍下目前常见的一些开源DevOps技术工具,你们能够根据本身的需求选择使用,固然也可使用像VSTS(Visual Studio Team Services)这样的集成团队环境。
其中有些内容在个人新书中有详细介绍,如代码仓库管理、虚拟机与容器化、持续集成&持续部署工具Jenkins、配置管理工具SaltStack。
Trello
Teambition
Worktile
Tower
以上工具使用大同小异,选择一款适合本身团队的就好。咱们公司主要使用的是Teambition,截张效果图以下:
confluence
禅道
Jira
Bugzila
其中confluence和禅道主要是产品的需求、定义、依赖和推广等的全面管理工具;而Jira和Bugzilla是产品的质量管理和监控能力,包括测试用例、缺陷跟踪和质量监控等。目前咱们使用Jira较多。
Git
Gitlab
Github
Git是一个开源的分布式版本控制系统;Gitlab和Github是用于仓库管理系统的开源项目,它们使用Git做为代码管理工具,并在此基础上搭建起来的web服务。咱们主要使用的是Git和Gitlab。
Git Flow
Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操做的工具。Git Flow模型以下图:
Github Flow
Github Flow是Git Flow的一个更简单的替换方案,它只有一个feature分支和一个master分支,简单而干净。Github Flow模型以下图:
Gitlab Flow
GitHub Flow认为你能够经过合并feature分支直接把代码部署到线上。Gitlab Flow模型以下图:
Gradle
Maven
SBT
ANT
我目前主要使用Gradle和Maven,而Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各类繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala。
VMware
VirtualBox
Vagrant
Docker
VMware和VirtualBox是最经常使用的虚拟机,支持很是多的平台,而Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。经过Vagrant能够方便实现的对虚拟机的管理,包括创建和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各种软件、打包和分发虚拟机运行环境等。
Docker是一个开源的应用容器引擎,它让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的Linux机器上,也能够实现虚拟化。
Jenkins
Hudson
Travis CI
CircleCI
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工做,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能,它的前身为Hudson。
Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins很明显的区别在于采用yaml格式,简洁清新独树一帜。
CircleCI是一个为web应用开发者提供服务的持续集成平台,主要为开发团队提供测试,持续集成,以及代码部署等服务。
Appium
Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操做系统。
Selenium
Selenium 测试直接在浏览器中运行,就像真实用户所作的同样。Selenium 测试能够在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中运行。
Mock测试
Mock测试就是在测试过程当中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来建立以便测试的测试方法。这个虚拟的对象就是Mock对象,Mock对象就是真实对象在调试期间的代替品。Java中的Mock框架经常使用的有EasyMock和Mockito等。
消费者驱动契约测试
契约测试是一种针对外部服务的接口进行的测试,它可以验证服务是否知足消费方期待的契约。当一些消费方经过接口使用某个组件的提供的行为时,它们之间就产生了契约。这个契约包含了对输入和输出的数据结构的指望,性能以及并发性。而PACT是目前比较流的消费者驱动契约测试框架。
Ansible
Puppet
Chef
IT运维自动化是指将IT运维中平常的、大量的重复性工做自动化,把过去的手工执行转为自动化操做。自动化是IT运维工做的升华,IT运维自动化不单纯是一个维护过程,更是一个管理的提高过程,是IT运维的最高层次,也是将来的发展趋势。下图为经常使用自动化运维工具对比:
Zabbix
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。
ELK Stack日志分析系统
ELK Stack是开源日志处理平台解决方案,背后的商业公司是Elastic。它由日志采集解析工具 Logstash、基于 Lucene 的全文搜索引擎 Elasticsearch、分析可视化平台 Kibana三部分组成。
云监控(如Amazon CloudWatch)
Amazon CloudWatch 是一项针对 AWS 云资源和在 AWS 上运行的应用程序进行监控的服务。您可使用 Amazon CloudWatch 收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对 AWS 资源的更改
DevOps的思想先进、理念完美,是目前为止我以为最好的解决方案,不过DevOps最终可以落地,很大程度上仍是归功于它有一整套的技术和开源工具。接下来让咱们一块儿看看DevOps想着的技术栈吧。
本节内容若是展开的话涉及太多,我将概略地为你们介绍下目前常见的一些开源DevOps技术工具,你们能够根据本身的需求选择使用,固然也可使用像VSTS(Visual Studio Team Services)这样的集成团队环境。
其中有些内容在个人新书中有详细介绍,如代码仓库管理、虚拟机与容器化、持续集成&持续部署工具Jenkins、配置管理工具SaltStack。
Trello
Teambition
Worktile
Tower
以上工具使用大同小异,选择一款适合本身团队的就好。咱们公司主要使用的是Teambition,截张效果图以下:
confluence
禅道
Jira
Bugzila
其中confluence和禅道主要是产品的需求、定义、依赖和推广等的全面管理工具;而Jira和Bugzilla是产品的质量管理和监控能力,包括测试用例、缺陷跟踪和质量监控等。目前咱们使用Jira较多。
Git
Gitlab
Github
Git是一个开源的分布式版本控制系统;Gitlab和Github是用于仓库管理系统的开源项目,它们使用Git做为代码管理工具,并在此基础上搭建起来的web服务。咱们主要使用的是Git和Gitlab。
Git Flow
Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操做的工具。Git Flow模型以下图:
Github Flow
Github Flow是Git Flow的一个更简单的替换方案,它只有一个feature分支和一个master分支,简单而干净。Github Flow模型以下图:
Gitlab Flow
GitHub Flow认为你能够经过合并feature分支直接把代码部署到线上。Gitlab Flow模型以下图:
Gradle
Maven
SBT
ANT
我目前主要使用Gradle和Maven,而Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各类繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala。
VMware
VirtualBox
Vagrant
Docker
VMware和VirtualBox是最经常使用的虚拟机,支持很是多的平台,而Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。经过Vagrant能够方便实现的对虚拟机的管理,包括创建和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各种软件、打包和分发虚拟机运行环境等。
Docker是一个开源的应用容器引擎,它让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的Linux机器上,也能够实现虚拟化。
Jenkins
Hudson
Travis CI
CircleCI
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工做,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能,它的前身为Hudson。
Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins很明显的区别在于采用yaml格式,简洁清新独树一帜。
CircleCI是一个为web应用开发者提供服务的持续集成平台,主要为开发团队提供测试,持续集成,以及代码部署等服务。
Appium
Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操做系统。
Selenium
Selenium 测试直接在浏览器中运行,就像真实用户所作的同样。Selenium 测试能够在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中运行。
Mock测试
Mock测试就是在测试过程当中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来建立以便测试的测试方法。这个虚拟的对象就是Mock对象,Mock对象就是真实对象在调试期间的代替品。Java中的Mock框架经常使用的有EasyMock和Mockito等。
消费者驱动契约测试
契约测试是一种针对外部服务的接口进行的测试,它可以验证服务是否知足消费方期待的契约。当一些消费方经过接口使用某个组件的提供的行为时,它们之间就产生了契约。这个契约包含了对输入和输出的数据结构的指望,性能以及并发性。而PACT是目前比较流的消费者驱动契约测试框架。
Ansible
Puppet
Chef
IT运维自动化是指将IT运维中平常的、大量的重复性工做自动化,把过去的手工执行转为自动化操做。自动化是IT运维工做的升华,IT运维自动化不单纯是一个维护过程,更是一个管理的提高过程,是IT运维的最高层次,也是将来的发展趋势。下图为经常使用自动化运维工具对比:
Zabbix
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。
ELK Stack日志分析系统
ELK Stack是开源日志处理平台解决方案,背后的商业公司是Elastic。它由日志采集解析工具 Logstash、基于 Lucene 的全文搜索引擎 Elasticsearch、分析可视化平台 Kibana三部分组成。
云监控(如Amazon CloudWatch)
Amazon CloudWatch 是一项针对 AWS 云资源和在 AWS 上运行的应用程序进行监控的服务。您可使用 Amazon CloudWatch 收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对 AWS 资源的更改
全面自动化 —— 部署、 升级、 扩展、 维护、 数据、 测试、 监测、 安全和策略管理。在自动化方面投入巨资,目标是100%的自动化,不考虑低于90%的可能性。
工具名称 | 工具用途 |
---|---|
Docker | 虚拟化容器技术,快速构建独立隔离服务 |
Jenkins | 自动化平台,能够配置自动化测试与持续部署 |
New Relic | 应用性能监测 |
Ansible | 自动化(配置管理工具)平台,持续集成与编排 |
Kubernetes | 开源的docker编排工具,能够发布与回滚 |
JMeter | 基于Java的压力测试工具。用于对软件作压力测试 |
还有不少工具可使用,这个具体咱们后续慢慢讲来。