什么是DevOps

  1. DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件
  2. Devops 包含了敏捷开发,测试,运维
  3. DevOps 是组织架构变革,更是团队文化和思想观念的变革

DevOps 的价值

  1. 填补开发,测试,运维之间的信息鸿沟,改善团队组织文化,提高参与感
  2. DevOps 是把人员、流程、产品进行结合,给用户提供持续价值的一个过程,既涉及到人员、流程、工具,也涉及到产品
  3. DevOps 最终目的是给客户提供持续交付的价值,流程包括:产品的规划跟踪、软件开发、构建测试、产品部署、运维、监控和优化。
  4. 简化重复性工作,减少不必要的等待,有工具进行发布部署,减少误操作的可能性

DevOps的目标

DevOps 必须以支持业务敏捷目标

  1. 精准,实时的响应客户需求
  2. 更好的体验和更高的效率
  3. 交付内容上关注完整的业务链条,交付过程上关注从业务,开发,运维在内的全链路流程实现端到端的快速响应,交付,稳定的运行

什么是持续集成

​ 频繁的将代码集成到主干,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成

什么是持续交付

​ 频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段,它强调的是不管怎么更新,软件随时随地都是可以交互的

什么是持续部署

​ 指的是代码通过评审以后,自动部署到生产环境,代码在任何时刻都是可部署的,可以进入生产阶段

Devops 工具实践

​ 明确目标:指导最终实践的成果,DevOps 是一个比较宽泛的概念,不同的团队,不同的公司,不同的预算,实践出来的结果差异非常大,制定符合团队的DevOps 目标,解决团队实际的痛点,有利于实践。

​ 资源:DevOps 工具有很多的云服务厂商,有预算,可以直接根据团队的需求,购买整套的基础设施,也可以利用开源的工具组装搭建,比如,Jenkins ,docker ,git ,镜像仓库等

​ 团队文化:实践DevOps 是一次团队文化,组织架构的变革,比如引入敏捷项目管理,会根据Scrum 来调整团队的组织架构,开发可能要学习一些部署的基础知识,运维可能要学习一些开发的基础知识,Scrum中文网:https://www.scrumcn.com/agile/scrum-knowledge-library.html

实践

  • 代码分支

    1. 明确开发,测试,线上等分支,明确分支的职责,设置对应的权限,制定符合团队的分支管理流程
    2. 明确代码合并的机制,制定合并的规则,例如
      • 单元测试不通过,不能进行合并
      • 代码Code Review 后才能合并
  • 代码环境变量
    1. 明确环境所对应的代码环境变量

      • 后端

        1. 开发环境:dev ,测试环境:test
      • 前端
        1. 开发环境:dev ,测试环境:test
    2. 明确代码依赖组件的环境
      • Redis ,数据库 ,消息队列, 日志等
      • 统一的命名方式,根据团队情况,看是否做每个组件环境的隔离
      • 最好统一技术栈和统一依赖的版本
      • 前端依赖包私有化:proget 等
  • 资源
    1. 明确有哪些可用的资源,比如,服务器,硬盘
    2. 根据预算资源和目标,寻找云服务的厂商,直接采购完整的DevOps平台
  • 工具
    1. 使用开源的工具进行搭建

      • 根据目标和目前实际部署情况,选择合适的工具,团队讨论,制定部署的方式和流程

        1. 基于docker部署:镜像仓库,docker,docker-compose 等
        2. 基于文件的方式部署
        3. 结合可用的资源,明确部署流程中,服务器资源的作用,以及承担的职责,画出部署图
    2. 使用云服务进行搭建
      • 阿里云云效 DevOps 平台
      • 华为云 DevCloud 平台

持续集成

  • 自动化构建项目流程

    1. 从源码仓库签出最新的代码

      • 选择源代码管理工具,要支持webhooks , 比如:GIT
      • 选择合适的CI任务触发机制,比如,提交代码就进行CI,或者手动点击CI任务进行CI
    2. 静态分析,检查最新的代码是否存在潜在的 bug 并符合项目的编码规范
      • 项目代码中选择合适的编码规范,比如Resharper,Sonar 等
      • 集成SonarQube工具进行代码的检查,可视化的监控代码的质量
    3. 编译源码
      • 编译源码看是否能成功编译
    4. 运行单元测试
      • 根据团队的实际情况,为代码编写单元测试,制定单元测试标准
      • 不要盲目追求覆盖率,而是思考业务上的价值(重要性与风险)
      • 自动化运行单元测试,运行失败进行反馈,也可以利用可视化的工具,监控单元测试情况
      • 单元测试运行失败,开发人员应该及时的进行修复,保证CI的正常运行
    5. 运行集成测试
      • 自动运行集成测试
    6. 打包
      • 自动化打包

持续部署

  • 根据部署可用的资源,明确部署的方式,讨论出部署的方案

    1. 基于容器部署
    2. 基于文件部署
  • 明确部署的目标,制定部署的完整流程,完善配套的方案
    1. 高可用
    2. 灰度发布
    3. 回滚方案

DevOps 度量指标

DevOps实践的成熟度差异很大,团队需要根据目标来制定符合团队期望的DevOps度量指标,根据团队使用的情况,不断的优化Devops,解决实际中的痛点

  • 单元测试的错误率,测试覆盖率 ,CI修复时间
  • 部署的频率,部署的失败率,部署时间
  • 代码扫描漏洞出,BUG

参考文章

https://www.cnblogs.com/yibutian/p/9561749.html

https://mp.weixin.qq.com/s/4x4iNHO1aHzJr0SihzD5Rg

DevOps基础的认识与工具实践的更多相关文章

  1. [转载]DevOps在传统企业的落地实践及案例分享

    内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...

  2. 企业DevOps研发模式下CI/CD实践详解指南

    阅读全文大概需要 10分钟. 1. 前言 借着公司今年新组建的中台研发部东风,我作为其中的主要负责人,在研发中心主导推行DevOps研发管理模式转变及质量管理创新建设,本篇文章摘取自今年9月底,笔者在 ...

  3. HUST高级软件工程--测试管理工具实践--Day4

    测试管理工具实践--Day4 今天完成任务情况: 小靳 今天,主要在前两天的基础上继续学习挖掘jira相关内容: 学会了如何创建项目,并且创建了issue 学会了创建一般账号,并且可以将任务分发给一般 ...

  4. HUST高级软件工程--测试管理工具实践--Day3

    测试管理工具实践--Day3 今天完成任务情况: 小靳 今天,大家参加考试,时间比较紧促.庆幸,自己的队伍比较给力,大家都没有拖后腿,深夜还在为自己的任务拼搏,很是激励人心 我今天的工作就是 学会了注 ...

  5. 第2课:操作系统网络配置【DevOps基础培训】

    第2课:操作系统网络配置 --DevOps基础培训 1. DNS配置 1.1 什么是DNS? 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP ...

  6. 第1课:Linux操作系统基础【DevOps基础培训】

    第1课:Linux操作系统基础 --DevOps基础培训 1. 云主机.公网IP 1.1 公网ip和私网ip 只有公网ip是能够连接互联网的,私网IP 一般只用作局域网 我们能够上网靠的是isp组织分 ...

  7. FW: Chef集中管理工具实践之 (1) 环境部署

    本文转载:http://heylinux.com/archives/2208.html Chef集中管理工具实践之 (1) 环境部署 目录结构Chef集中管理工具实践之 (0) 什么是ChefChef ...

  8. 我的前端之旅--SeaJs基础和spm编译工具运用[图文]

    标签:seajs   nodejs   npm   spm   js 1. 概述 本文章来源于本人在项目的实际应用中写下的记录.因初期在安装和使用Seajs和SPM的时候,有点不知所措的经历.为此,我 ...

  9. c语言学习基础:[1]开发工具介绍

    标签:c语言 1 2 3 4 分步阅读 学习编程语言的童鞋们一开始接触到的最多的估计就是C语言了,其次才是什么java.c++等,可以说学习c语言是我们走向编程世界的一座桥梁,学好它,对于我们学习和研 ...

随机推荐

  1. .NET Core/.NET5/.NET6 开源项目汇总10:实用工具

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  2. ES6学习笔记之函数(二)

    5.作用域 使用默认参数时,参数会形成一个独立的作用域,此作用域与函数体中的作用域是平行关系,互不影响. var x = 1; function show(x, y= function () { x= ...

  3. 一、.Net Core 依赖注入详解及Autofac使用

    .NET中的依赖注入实际上帮助我们解耦了我们的代码,是控制反转和依赖反转原则的具体实现. .Net Core的依赖注入的好处: 1. application 更稳定,容易维护和演化: 2. 实现细节的 ...

  4. [Django REST framework - RBAC-基于角色的访问控制、base64编码 、xadmin的使用]

    [Django REST framework - RBAC-基于角色的访问控制.base64编码 .xadmin的使用] RBAC-基于角色的访问控制 RBAC 是基于角色的访问控制(Role-Bas ...

  5. vsftpd配置文件详解(转)

      vsftpd配置文件详解     1.默认配置: 1>允许匿名用户和本地用户登陆.      anonymous_enable=YES      local_enable=YES 2> ...

  6. Swoole_process实现进程池的方法

    Swoole 的进程之间有两种通信方式,一种是消息队列(queue),另一种是管道(pipe),对swoole_process 的研究在swoole中显得尤为重要. 预备知识 IO多路复用 swool ...

  7. [小技巧] google map使用

    在网页中打开 google map 中,可以使用 shift + - 来缩小地图,shift + + 来放大地图.

  8. php漏洞 sha1函数

    0x01: 绕过技巧是传入的是数组时,会报错,返回为NULL,当传入的两个参数都是数组直接相等

  9. 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈

    2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...

  10. 计算机网络体系结构整理-第二单元IP技术

    IP技术 1.IPV4 Ipv4的报头格式 Ipv4地址分为ABCDE类, 类别 IP地址范围 私有IP地址范围 A 0.0.0.0-127.255.255.255 10.0.0.0-10.255.2 ...