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. hadoop配置文件的作用

    core-site.xml <property> //指定hdfs的主端口 namenode要放在哪台机器上 <name>fs.defaultFS</name> & ...

  2. poj2774 Long Long Message 后缀数组求最长公共子串

    题目链接:http://poj.org/problem?id=2774 这是一道很好的后缀数组的入门题目 题意:给你两个字符串,然后求这两个的字符串的最长连续的公共子串 一般用后缀数组解决的两个字符串 ...

  3. JAVA自增自减的玄机

    先看下面代码: ; i = i++; System.out.println(i); 请问:输出结果为多少? ---------------------------------------------- ...

  4. Html标签,file方式,上传文件

    恩,如果不记下来,记忆就会模糊掉. 希望自己下次看见这篇博客的时候,会解决掉疑问 ----------------------------------------------------------- ...

  5. LeetCode---------Add Two Numbers 解法

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  6. [原创]Nexus5 内核编译烧录过程记录

    参考Android系统源代码情况分析第二章进行实践,为了提高效率,也为了增加实践机会,使用Nexus5进行内核编译.需要说明的是,Android源代码工程默认是不包含它所使用的Linux内核源码,如果 ...

  7. 001---Hibernate简介( 开源O/R映射框架)

    该系列教程是使用hibernate3,hibernate4和3有区别(集成spring,使用等),请注意 001---Hibernate简介(开源O/R映射框架) ORM(Object Relatio ...

  8. JMeter-Eclipse添加自定义函数 MD5加密 32位和16位

    最近公司的接口都是MD5  16位加密,所以要使用加密功能. 之前也做过加密,因为用的比较少,所以是写了一个加密方法,导出JAR包,调用的.用起来需要很多设置,并且换算效率也不高.听前同事说,jmet ...

  9. js添加多个样式属性cssText

    document.getElementById("box").style.cssText += ";color:red;font-size:20px"; 代码分 ...

  10. ABP入门系列(18)—— 使用领域服务

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1.引言 自上次更新有一个多月了,发现越往下写,越不知如何去写.特别是当遇到DDD中一些概念术语的 ...