DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps。那么,今天就说说特来电云平台在DevOps方面的实践吧。

说DevOps,不得不说DevOps的具体含义。那么,DevOps是什么呢?是开发+运维么?每个人都DevOps的理解都不尽相同,下面是一组对DevOps的定义,通过这组定义,我们基本可以看清DevOps是干啥的。在这众多的解释中,我认为有一种解释可以更贴切:DevOps是一种能力,具备此能力的团队可以高质量、快速的交付软件产品或服务。这个总结定义道出了DevOps的精神和根本内涵。

  • 一组过程、方法与系统的统称。用于促进开发、运维和质量保障部门之间的沟通、协作与整合。
  • DevOps是一种文化转变,或者说是一个鼓励更好地交流和协作(即团队合作)以便于更快地构建可靠性更高、质量更好的软件的运动。
  • DevOps 是一种工程模式,本质上是一种分工,通过对开发、运维、测试,配管等角色职责的分工,实现工程效率最大化,进而满足业务的需求。
  • DevOps主要解决两个方面的问题:
  • 按时、快速、高质量的交付软件产品和服务
  • 通过流程的自动化,节省成本

说到这里,我们不仅要问到:DevOps与敏捷开发什么关系?看上去,他们是如此的相似呢。那么再要说说敏捷。敏捷开发到底什么意思?这仅仅意味着快速吗?简单来说,敏捷开发意味着更多的迭代:更早更频繁地发布产品更新。先把东西做出来,而不是像过去那样过于忧虑产品是否完美。这就是那个“永远beta版”的概念,30天把原型快速搞出来,然后看看人们到底怎么想。敏捷的字面意思就是快速改变的能力。DevOps关注点已经不仅仅是快速改变的能力,他更关注的是如何移除浪费。其实,DevOps是一种敏捷开发的方法,但已超越了敏捷。DevOps是软件开发生命周期(SDLC)从瀑布式到敏捷再到精益的发展。DevOps超越了敏捷,它的关注点是从SDLC中移除浪费。通常情况下,发现浪费或者瓶颈的形式包括:不一致的环境,人工的构建和部署流程,差的质量和测试实践,IT部门之间缺少沟通和理解,频繁的中断和失败的协定以及那些需要珍贵的资源、花费重要的时间和金钱才能保持系统运行的全套问题。

在DevOps的能力闭环中,关注的是:

  • 更早、更频繁地发布产品更新,永远beta版,更快速的响应变化。
  • 依托自动化工具(测试、部署),把开发、测试、发布、部署的过程整合,实现即时交付。

如要具备此能力,就要求DevOps的涉众:开发、测试、运维,求同存异,为组织目标共同担当,紧密配合,提升产品交付能力。启用DevOps会对我们的带来各种变革,总体来说主要有三个方面。DevOps的核心是角色的分工,而不是组织架构变化,垂直化的组织架构不代表可以实现DevOps所需要的分工模式,横向的组织架构也不代表传统的分工模式。DevOps的目标是工程效率最大化,它本身也只是一种方法论,是为了实现工程效率最大化的目标而存在的。

特来电云平台在实践DevOps时,核心思路是通过无人值守的、全过程的自动化(自动构建、自动打包、自动部署、自动测试、自动发布),实现软件研发、部署的流水线式作业。

当开发人员CheckIn代码后,会触发相关应用的自动构建,构建的过程会编译源代码并执行单元测试。单元测试是控制产品质量的第一道大闸,我们要求所有的单元测试必须100%通过,并且所有应用程序要从下面五个方面编写单元测试脚本:内部核心类的公共方法、服务方法(HSF、SG)、符合场景测试、性能测试、破坏性测试。当单元测试执行通过后,会对产出物进行自动打包。因为特来电云平台采用了微软.net技术路线,整个持续集成的过程,我们全部是基于微软的TFS搭建。当然,TFS中没有自动打包的特性,此特性是基于自主开发的补丁管理平台实现的。通过补丁平台不仅仅能制作补丁,还能够为服务器安装补丁。下面是一个公共技术部持续集成的面板。

持续集成结束产出的补丁包,会依次、自动部署到普通测试环境、准生产测试环境、压测环境中进行各类自动化测试。普通测试环境,主要进行接口的自动化测试;准生产测试环境,主要进行接口自动化测试和UI的自动化测试;压力测试环境主要进行性能测试和破坏性测试。当三类测试环境的自动化全部通过,管理员审批通过后, 补丁包首先会在上海数据中心灰度发布上线,24H后在北京数据中心发布上线。持续交付也是基于微软TFS中的Release搭建,但是集成了很多特来电自主研发的系统。三类测试环境和生成环境都部署了特来电自主研发的分布式运维管理平台、补丁安装工具。通过分布式运维管理平台,可以调动500+台服务按照一定的规则更新补丁,此过程也是无人值守的。另外,三类测试环境分别部署了特来电服务治理平台,通过此平台实现接口测试、UI测试、压力测试,并自动出具测试结果和测试报告。限于篇幅,分布式运维管理平台和服务治理平台,后续给大家详细介绍。

下面是基于TFS搭建的持续交付的运行效果图:

在搭建CI、CD的过程中,有非常多的坑需要踩,有技术方面的,也有管理方面的。晒一下重要的建议,希望可以帮助到大家。

1.要有清晰的产品分层结构。

2.清晰、明确的程序集引用关系:nuget、公共目录

3.较全面的自动化测试代码

4.全面的接口测试、UI自动化测试,否则持续集成就变成补丁发布工具

魏亮 2017-6-29

基于TFS的.net技术路线的云平台DevOps实践的更多相关文章

  1. 云平台DevOps实践

    基于TFS的.net技术路线的云平台DevOps实践   DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. ...

  2. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  3. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  4. Docker容器技术的PaaS云平台架构设计***

    基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...

  5. 基于PaaS和SaaS研发的商业云平台实战 转 (今后所有的IT行业会持续集成,往虚拟化方向更快更深的发展,商业化才是这些技术的最终目的)

    背景介绍 SaaS.PaaS.IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度.本文将通过真实的商业平台案例-MaxWon研发实 ...

  6. 容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

    开篇 最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了.算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件.首先来看下架构图(实在画的太丑 ...

  7. Kubernetes容器云平台建设实践

    [51CTO.com原创稿件]Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.伴随着云原生技术的迅速崛起,如今Kubernetes 事实上已经 ...

  8. 阿里巴巴基于应用和变更的交付模式|阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...

  9. 海西 · 云交付 DevOps实践落地方案

    ​ 一.背景概述 (一)产品背景 1.互联网+的需要   在信息越来越繁杂的互联网时代,公司所运行的项目越来越多,项目相关服务繁多,服务之间存在复杂的依赖关系,运维与管理任务越来越繁重,手工交付需要花 ...

随机推荐

  1. MFC基础程序设计VS2015 最新02

    视频教程地址观看:http://pan.baidu.com/s/1mhKQ6kK 对于每个函数的帮助资料都应该详细阅读:a)简要说明:能够快速了解函数的功能:b)参数:每一个参数的功能都应该了解它的含 ...

  2. 读《Java并发编程的艺术》(一)

    离开博客园很久了,自从找到工作,到现在基本没有再写过博客了.在大学培养起来的写博客的习惯在慢慢的消失殆尽,感觉汗颜.所以现在要开始重新培养起这个习惯,定期写博客不仅是对自己学习知识的一种沉淀,更是在督 ...

  3. JAVA并发编程实战---第三章:对象的共享

    在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程序中,要对内存操作的执行顺序进行判断几乎无法得到正确的结果. 非原子的64位操作 当 ...

  4. vue动态加载图片,取消格式验证

    vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...

  5. WannaflyUnion每日一题

    ---恢复内容开始--- 1. http://www.spoj.com/problems/KAOS/ 题意:给定n个字符串,统计字符串(s1, s2)的对数,使得s1的字典序比s2的字典序要大,s1反 ...

  6. .net实现多重继承问题(virtual)

    C#中是没有类的多重继承这个概念.要使用多重继承必须要通过接口Interface来完成, 一.接口类 interface  getTable{      DataTable Getdatatable( ...

  7. 开涛spring3(6.5) - AOP 之 6.5 AspectJ切入点语法详解

    6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的Aspect ...

  8. python爬虫从入门到放弃(三)之 Urllib库的基本使用

    官方文档地址:https://docs.python.org/3/library/urllib.html 什么是Urllib Urllib是python内置的HTTP请求库包括以下模块urllib.r ...

  9. iOS安全攻防之结构体保护使用

    Objective-C 代码很容易被 hook,因此需要对一些重要的业务逻辑进行保护,可以改用结构体的形式,把函数名隐藏在结构体里,以函数指针成员的形式存储.这样编译后只留了下地址,去掉了名字和参数表 ...

  10. iOS开发之 Lottie -- 炫酷的动效

    动效在软件开发中非常常见,炫酷的动画能提升应用的B格,然而由设计师的设计转化成程序猿GG的代码是个非常"痛苦"的过程.对于复杂动画,可能要花费很多时间去研究和实现.Lottie 的 ...