devops在公司项目中的实践落地

ls1519 ls1519     2023-04-03     585

关键词:

原文出处:https://www.cnblogs.com/beef/p/7743594.html

【DevOps】团队敏捷开发系列--开山篇

https://www.cnblogs.com/hyhnet/p/8082390.html

 

技术图片

现在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)手册中的精益小屋:

技术图片

而精益软件开发是精益生产和实践在软件开发领域的应用,总结为如下七条原则:

  1. 消除浪费

  2. 增强学习

  3. 尽量延迟决定

  4. 尽快发布

  5. 下放权力

  6. 嵌入质量

  7. 全局优化

精益管理贯穿于整个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机器上,也可以实现虚拟化。

持续集成(CI)&持续部署(CD)

  • 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机器上,也可以实现虚拟化。

持续集成(CI)&持续部署(CD)

  • 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自动化

全面自动化 —— 部署、 升级、 扩展、 维护、 数据、 测试、 监测、 安全和策略管理。在自动化方面投入巨资,目标是100%的自动化,不考虑低于90%的可能性。

DevOps团队工具

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

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

devops在传统企业的落地实践及案例分享

...p;SRE超越传统运维之道”进行《DevOps在传统企业的落地实践及案例分享》演讲分享。IT大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。摘要在传统支撑模式无法满足业务价值快速交付要求的情况下,传统企业应该... 查看详情

devops转型之pipeline实践

...适切入点很关键,充分利用JenkinsPipeline在DevOps和持续集成中的的核心作用,本主题将在DevOps工具链的选型以及如何落地实践做介绍。Pipeline流水线是指软件从版本控制库到用户手中这一过程的自动化实现是持续交付与DevOps的核心... 查看详情

devops落地与转型:提升研发效能的方法与实践(代码片段)

...作者介绍目录粉丝福利福利1福利2前言DevOps在各大互联网公司已经成为技术团队开展数字化转型和研发效能提升的可行实践框架和指导方法。同时,研发效能顺势成为近些年被频繁提起的热点。如今,各大互联网公司都在... 查看详情

在落地devops项目中遇到的困难挑战和解决思路

  DevOps落地困境  本文章由www.mingpaixinxi.com网转载分享,DevOps落地为什么那么难?因为从设计人员、组织架构、流程、人员技能到工具,变化很大,要求很高,建设风险很高。从理念到落地,需要一定的周期才能够成熟,技... 查看详情

tfs在项目中devops落地进程(上)

...gement)管理工具。透过TFS你将能获取到从代码版本管理->项目管理->持续集成->自动发布->自动测 查看详情

devops落地实践bat系列敏捷看板icafevstapd

...的DevOps解决方案聚焦于代码托管/CICD/测试管理/运维监控/项目管理五大领域,具体则依托于腾云TGit/CCI/COC/TAPD四大开发者工具。因为功能和做法较为相近,这篇文章中我们将会通过其官方的介绍来看一下敏捷看板的项目管理相关... 查看详情

演讲实录|devops与传统的融合落地实践(上)

...注~本文是优维科技CEO王津银关于DevOps与传统的融合落地实践的精彩分享650)this.width=650;"src="https://mmbiz.qpic.cn/mmbiz_png/an9nPmVtniaM69S2d5rvgHolPG3j3ME407yjXViceKAjL4YwE 查看详情

数人云牵手红帽ansible:七大最佳实践解锁devops落地姿势

2018年1月23日,红帽联合至顶网在上海举办了以“智能自动规范——迎接自动化运维新时代”为主题的“AnsibleAutomates”大会。这是国内首届AnsibleAutomates大会,会议聚集了众多红帽的技术专家和第三方技术大咖,对Ansible带来全方... 查看详情

devops架构师--02kubernetes落地实践之旅(代码片段)

文章目录第二天Kubernetes落地实践之旅纯容器模式的问题容器调度管理平台架构图核心组件工作流程架构设计的几点思考实践--集群安装k8s集群主流安装方式对比分析核心组件理解集群资源kubectl的使用实践--使用k8s管理业务应用最... 查看详情

devops落地实践bat系列cicdipipevscci

...的DevOps解决方案聚焦于代码托管/CICD/测试管理/运维监控/项目管理五大领域,具体则依托于腾云TGit/CCI/COC/TAPD四大开发者工具。因为功能和做法较为相近,这篇文章中我们将会通过其官方的介绍来看一下CICD的具体做法和各自的亮... 查看详情

如何在软件研发阶段落地安全实践

...来看一下。本文分享自华为云社区《DevSecOps软件研发安全实践——发布篇》,作者:华为云PaaS小助手。前言说到发布,就会想到部署,本文中讨论的部署发布是基于DevOps的背景。在《DevOps实践指南》中对这两个词... 查看详情

ai神经网络流水线mlopsmachinelearningpiplineebay和北美等公司的落地qcon大会2022

1.MLOps-machinelearningoperationsMLOps是一组实践,旨在可靠且高效地在生产中部署和维护机器学习模型。[1]这个词是“机器学习”和DevOps在软件领域的不断发展实践的复合词。机器学习模型在孤立的实验系统中进行测试和开发。当... 查看详情

ai神经网络流水线mlopsmachinelearningpiplineebay和北美等公司的落地qcon大会2022

1.MLOps-machinelearningoperationsMLOps是一组实践,旨在可靠且高效地在生产中部署和维护机器学习模型。[1]这个词是“机器学习”和DevOps在软件领域的不断发展实践的复合词。机器学习模型在孤立的实验系统中进行测试和开发。当... 查看详情

浅谈测试环境治理在devops中的应用(代码片段)

...来Devops可以说是比较火的概念,几乎一夜之间全部大公司都在谈Devops,谈CI/CD流水线,谈效能提升;如果哪个公司没有实施Devops实践,那么肯定会在心里被鄙视到!其实Devops之所以能火起来,还是因为... 查看详情

拼多多“薅羊毛”事件引发测试工作的思考

前言2017年我有幸负责公司DevOps治理和落地项目,在整个DevOps落地工作中,深感测试环节在持续交付工作中的弱态及重要。实践是检验真理的唯一标准,没有实践就没有发言权。为求深入理解,我亲身投入了测试岗位的一线工作... 查看详情

奔驰在打造未来汽车时的devops实践

...上分享中介绍了奔驰通过DevOps落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:https://www.youtube.com/watch?v=zw0QsPgD5Ug背景介绍奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等... 查看详情

如何在devops中进行api全生命周期管理?

...API文档质量参差不齐,导致规范很难落地执行。原因在于公司有很多的研发项目和团队,不同的团队有不同的API管理习惯,尤其是常用的Swagger方式的管理,很难进行统一的平台化管理。针对这个困境,可以通过统一的API管理平... 查看详情

2022年devops实践的4个关键点

...通且“同意”,DevOps实践才能顺利。这也就是为什么所有公司在切换至DevOps时的难点和重点都是——文化建设和学习。  此外,对开 查看详情