揭秘微软6万工程师DevOps成功转型的技术「武器」

在微软,通过其自身数年的 DevOps 转型, 6 万名工程师实现了更好的软件平台创新和快速迭代。微软有庞大的技术产品矩阵,同时也具有每天发布的能力,其中,微软研发云是支撑整个开发过程与运维最重要的基础平台。微软研发云包括了全球六万名软件工程师每天使用的 Visual Studio Team Service(VSTS),以及一系列虚拟实验室、监控、 部署、移动应用测试等云服务。在开发与运维团队之间,微软研发云提供的顺畅对接使其具有了端到端开发管理能力,实现了持续交付、持续监控、持续学习与进化。

12 月 20 日(周三),微软云思塾 - 微软研发云专场北京站活动迎来了微软的四位技术专家——微软公司大中华区云开发平台高级产品经理胡德民、微软中国 DevOps 技术专家庄俊乾、微软中国特约移动开发技术顾问周岳、微软公司大中华区首席开发技术社区总监徐磊共同布道微软 DevOps 大规模转型的成功秘诀以及微软研发云端到端的技术能力。如需下载本次演讲 PPT,请在 InfoQ 公众号对话框中回复「微软 devops」,就能获取相应的下载链接。



1微软全球工程团队的 DevOps 转型之路



过去在工程师团队中有三个角色:项目经理,开发人员和测试人员,从组织和团队的角度来说,开发和测试是完全区分开的。过去的微软像是一个盒装软件,Windows、Office 火的满天飞,软件迭代速度三年一版。然而这一切都不适用于如今架构和软件更新迅猛发展的时代,DevOps 成为一项必须。

对于微软而言,微软 DevOps 带来的最大价值之一就是「不承认传统,只尊重创新」。很多 IT、互联网公司想做却不敢做的一件事是:不敢把包袱丢掉。原因之一就是旧有的包袱丢掉了,新的技术却无法跟上脚步。而微软这些年做的最重要的就是创新。

微软 DevOps 里程碑事件

微软 DevOps 中的关键一步是 VSTS(Visual Studio Team Services),现在每天有 43000 位来自不同工程师团队的内部用户使用它,并且这个数量在急剧增长,微软非常希望 VSTS 能成为支持工程师团队实践的默认工具。在 VSTS 团队中,Canary 发布被称为部署环。团队自动化了构建和测试过程,并自动部署到内部或早期的 feedback 账户或开发者的物理设备中(也叫 dogfooding)。这样能够控制软件的发布,并获得早期的反馈和实验。VSTS 团队就采用了部署环的方式,服务的更新被分解为 4 个部署环,分布在 Microsoft Azure 不同区域的 12 个扩展单元里。

另外,随着 AI 时代的全面到来,很多开发者在使用微软工具(Visual Studio)的同时会疑问怎么和 AI 平台及工具结合,怎么用 Visual Studio 写 Azure 的东西。于是,胡德民也全面地讲述了微软的人工智能技术栈。

传统企业面临 DevOps 转型会遇到各样的挑战,例如程序员质量不统一、承担风险能力较低、系统类型太多且没有固定套路、程序架构需要重新调整等。微软自己的亲身实践证明了 DevOps 的全面转型帮助提高了编码效率,质量和产量,将开发者们从繁琐的工作中解脱出来,鼓励了最佳的工程实践,从而形成了更好的工程师团队。

查看胡德民完整版演讲视频,更多干货

class="video_iframe" frameborder="0" scrolling="no" allowfullscreen="" data-ratio="1.7647058823529411" data-w="480" data-vidtype="2" data-src="http://v.qq.com/iframe/player.html?vid=j0522tz1x8p&width=654&height=367.875&auto=0" style="display: block; width: 654px !important; height: 367.875px !important;" width="654" height="367.875" data-vh="367.875" data-vw="654" src="http://v.qq.com/iframe/player.html?vid=j0522tz1x8p&width=654&height=367.875&auto=0"/>



2世界级水平的端到端 DevOps 支撑平台



在实际的开发生命周期管理中其实存在诸多问题,传统意义上,每个工具都有自己的一套标准,从而导致了脆弱的集成、维护和管理成本高、不兼容的应用变成接口、多个平台之间来回切换的不便捷与效率低。此外,在团队项目之间实现测试用例和测试计划的共享,是很多用户关注的问题,尤其在开发产品 + 服务的团队中。

TFS 定位为企业级的研发协作管理平台和 DevOps 平台,通过平台优化软件研发流程,支持管理制度落地、让开发资产统一管理,支持多种主流研发模式。值得一提的是,Wiki 是 TFS 2018 新增的一个功能。每个团队项目都可以在 TFS 系统中创建和维护自己的知识库(Wiki)。这个功能的上线,在很大程度了弥补了之前版本依赖 SharePoint 实现知识库的缺陷,这也是这个版本不在支持 SharePoint 集成的一个重要原因。

Visual Studio TFS 提供开发团队运营所需的工具和灵活性。通过与可配置看板结合使用的拖放式积压工作管理, 可以优化和可视化有助于项目的每个团队的重要工作。现成的 Scrum 也将支持计划冲刺、管理团队能力并使用任务板和燃尽图跟踪进度。

此外,庄俊乾还上手演示了如何在微软研发云之中,完成从需求规划、功能分解、广告牌管理、Bug 管理、自动化测试与构建、运维监控一直到用户反馈的收集,并解释了当前 DevOps 推动过程中的各种难点与痛点,以及如何从微软研发云的功能中发掘对这些问题的解答。

查看庄俊乾完整版演讲视频,更多干货

class="video_iframe" frameborder="0" scrolling="no" allowfullscreen="" data-ratio="1.7647058823529411" data-w="480" data-vidtype="2" data-src="http://v.qq.com/iframe/player.html?vid=f0522a4l77k&width=654&height=367.875&auto=0" style="display: block; width: 654px !important; height: 367.875px !important;" width="654" height="367.875" data-vh="367.875" data-vw="654" src="http://v.qq.com/iframe/player.html?vid=f0522a4l77k&width=654&height=367.875&auto=0"/>



3构建跨平台移动应用的 DevOps 开发方法



在应用高效开发的过程中,要避免 iOS 版本、Android 版本甚至 Windows 版本的重复性开发,增加代码共享、避免用不同的编程语言不同的开发环境来编不同的 APP 是自然的思路。微软提供了三套解决方案来增加代码共享。

  1. C++。微软的 Office 产品全部是基于 C++ 的代码共享。

  2. 针对 JavaScript 的 Apache Cordova 架构,在 Visual Studio 2015 里做了很多支持它的开发工具。

  3. 收购了 Xamarin 提供给所有 Visual Studio 开发人员使用,没有任何新增费用,包括在 Mac 上提供这项支持,此外还将 Xamarin 的运行时全部开源。

基于 Xamarin,开发人员可以用 C# 编程语言构建完全原生的 iOS 和 Android 的 APP——用 Apache Cordova 可能还会担心性能问题,但 Xamarin 编的完全是原生的 APP,没有任何性能和执行的问题,而且 Xamarin 还可以极大的支持代码共享在 iOS 和 Android 上。

在演讲中,周岳演示了如何运用 Visual Studio 进行 iOS 与 Android 的原生应用开发,并在微软研发云中,进行一致性的变更管理、代码管理、构建与发布,其后又介绍了 Hockey Apps 支持测试版本发布的强大功能及结合实体手机硬件的云端自动化测试环境。

查看周岳完整版演讲视频,更多干货

class="video_iframe" frameborder="0" scrolling="no" allowfullscreen="" data-ratio="1.7647058823529411" data-w="480" data-vidtype="2" data-src="http://v.qq.com/iframe/player.html?vid=u052283qptr&width=654&height=367.875&auto=0" style="display: block; width: 654px !important; height: 367.875px !important;" width="654" height="367.875" data-vh="367.875" data-vw="654" src="http://v.qq.com/iframe/player.html?vid=u052283qptr&width=654&height=367.875&auto=0"/>



4与容器共舞:微软研发云与 Docker 的集成应用实践



微软之前就成功而及时地与 Docker 达成了深度合作。根据 InfoQ 此前的报道,「微软曾经在这个领域做了三件看起来非常具有前瞻性的事情,一是与 Docker 合作催生 Windows 容器,包括 Windows Server Core 和 Windows Nano Server 两种形式;二是着力优化 Windows 作为 Docker 宿主的能力和体验,使得 Linux 容器能够通过 Docker for Windows 稳定轻快地运行于开发人员 Windows 上;三是不失时机地推出了 Azure 容器服务(Azure Container Service),使得基于容器的大规模应用程序能够顺利地在微软云中部署生根。」

徐磊在演讲中重点讲述了他们的一项开发——DevOps 实验室,目的是强调实操能力建设(具体参见:https://docs.devopshub.cn/#!index.md)。

DevOps 实验室技术架构如下:前端浏览器中的每一项服务,包括 SSH 远程、RDP 远程及 VNC 远程等全部对应到相应的容器,这使得在每一个应用部署过程中实际就是管理着一个 Docker 集群。其自动化能力是通过 TFS 里所提供的 CI/CD 及 TFS git 来实现。其中,开发人员将符合基础设施及代码的模板放到库里,通过 TFS 流水线对其进行调度,接着在云里创建一个独立环境,相当于每个人在云里都有独立子网,然后再在子网中安装、配置所有的环境。

DevOps 实验室在持续交付实践主要集中在三项:一是 TFS 精益看板、二是 TFS 持续集成、三是 TFS 持续部署。包括自动完成 docker 镜像生成,推送至私有镜像仓库 (Harbor) ,自动生成部署配置文件 docker-compose-template.yml ,流水线统一控制的环境配置管理等。

此外,徐磊还重点基于 Asp.net Core、 Python、Node JS、Java 做了示例程序,帮助参会者理解如何完成一条完整的开发,测试到自动化发布流水线的建立,将应用发布到一个 Docker Swarm 的容器调度平台中。

查看徐磊完整版演讲视频及更多干货,请复制本链接到浏览器中查看:

https://v.qq.com/x/page/d0522k2wqam.html

原文地址:https://mp.weixin.qq.com/s/_maa3hPl4aCwaqAur52hfA#rd


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj4787-[NOIP2016提高A组模拟9.17]数格子【矩阵乘法】

正题 题目大意 求121\times 212的方块铺满4n4\times n4n的方格方案总数。 解题思路 首先 当计算fnf_nfn​时, 显然最后一排可以(−−−−)(∣∣∣∣)(−−∣∣)(∣−−∣)(∣∣−−)(--\ --)(|\ \ |\ \ |\ \ |)(--\ \ |\ \ |)(|\ \ --\ \ |)(|\ \ |--)(−− −−)…

Flowable学习笔记(一、入门)

转载自 Flowable学习笔记(一、入门) 一、Flowable简介 1、Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流…

01-MyBatis入门程序

MyBatis入门程序 目录 1. 下载 Mybatis 核心包2. 创建工程,引入 MyBatis 核心包及依赖包3. 创建 customer 表,建立与表对应的 domain使用 lombok,开启注解创建 Customer 类4. 创建 MyBatis 核心配置文件 SqlMappingConfig.xml5. 创建表对象…

角落的开发工具集之Vs(Visual Studio)2017插件推荐

“ 工具善其事,必先利其器!装好这些插件让vs更上一层楼”因为最近录制视频的缘故,很多朋友都在QQ群留言,或者微信公众号私信我,问我一些工具和一些插件啊,怎么使用的啊?那么今天我忙里偷闲整理一…

jzoj4788-[NOIP2016提高A组模拟9.17]序列【差分,贪心】

正题 题目大意 一个序列AAA可以每次选择一段区间(Ai1)%4(i∈[l..r])(A_{i}1)\%4(i\in [l..r])(Ai​1)%4(i∈[l..r])。求最少次数使其变成BBB序列。 解题思路 先计算出每个数字最少加多少可以变成目标数字记录入aaa数组。 然后若不考虑一个数要取模多次的话答案就是 ∑i1nmax…

02-MyBatis配置SQL打印

MyBatis 配置SQL打印 在 SqlMappingConfig.xml 中配置以下代码&#xff1a; <!--配置sql打印--> <settings><setting name"logImpl" value"STDOUT_LOGGING"/> </settings>运行效果&#xff1a;会显示 SQL 语句&#xff0c;查询结…

Flowable学习笔记(二、BPMN 2.0-基础 )

转载自 Flowable学习笔记&#xff08;二、BPMN 2.0-基础 &#xff09; 1、BPMN简介 业务流程模型和标记法&#xff08;BPMN, Business Process Model and Notation&#xff09;是一套图形化表示法&#xff0c;用于以业务流程模型详细说明各种业务流程。 它最初由业务流程管理…

ASP.NET Core文件上传与下载(多种上传方式)

前言前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了.打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧.ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧.正文1.使用模型绑定上传文件(官方例子)官方机器翻译的地址:https://docs.mic…

03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 目录 sql 语句中的 #{}#{} 模糊查询错误用法#{} 实现模糊查询sql 语句中的 ${}${} 实现模糊查询#{} 与 ${} 对比sql 语句中的 #{} 表示一个占位符号&#xff0c;通过 #{} 可以实现 preparedStatement 向占位符中设置值…

欢乐纪中A组周六赛【2019.5.25】

前言 话说中间jzojjzojjzoj炸了一次。 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC222(J−2)WYC(me)(J-2)WYC(me)(J−2)WYC(me)250250250100100100100100100505050444(J−2)ZYC(J-2)ZYC(J−2)ZYC200200…

SpringBoot集成Flowable

一、项目结构 二、maven配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

04-插入操作更新操作删除操作

保存更新删除 目录 插入操作获取插入的最后一个id更新操作删除操作插入操作 映射文件 Customer.xml &#xff1a; 插入数据的标签为 insert&#xff0c;与查询 select 区分开来。 parameterType 是输入参数类型&#xff0c;这里指定为 Customer 对象&#xff0c;即需要传入一…

微软跨平台移动开发工具套件HockeyApp宣布免费

HockeyApp 是一款领先的移动崩溃分析和应用发布服务&#xff0c;可为开发者提供实时崩溃分析报告、用户反馈、测试版分发平台以及测试分析等功能&#xff0c;于 2016 年被微软收购&#xff0c;随后集成在了 Visual Studio 应用中心中&#xff0c;与 Xamarin Insights 一起提供移…

P3914-染色计数【树形dp】

正题 题目链接:https://www.luogu.org/problemnew/show/P3914 题目大意 nnn个点每个点有些可以染的颜色&#xff0c;要求相邻颜色不相同&#xff0c;方案总数。 解题思路 树形dpdpdp&#xff0c;定义fx,if_{x,i}fx,i​表示点xxx的染颜色iii的方案数。然后定义zx∑i1mfxiz_x\s…

ASP.NET Core使用静态文件、目录游览与MIME类型管理

前言今天我们来了解了解ASP.NET Core中的静态文件的处理方式.以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好了.ASP.NET Core则不同,因为是跨平台的,解耦了IIS,所以这些工作 我们可以在管道代码中处理.正文在我们的Web程序开发中,肯定要提…

P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】

正题 题目链接:https://www.luogu.org/problemnew/show/P5283 题目大意 给定一个序列&#xff0c;求kkk个不同的的[l..r][l..r][l..r]的区间异或值的和最大。 解题思路 先让aiaixorai−1a_ia_i\ xor\ a_{i-1}ai​ai​ xor ai−1​(异或前缀和)。 然后现在问题变成了求kkk对最…

ES快速入门

转载自 ES快速入门 3 ES快速入门 ES作为一个索引及搜索服务&#xff0c;对外提供丰富的REST接口&#xff0c;快速入门部分的实例使用head插件来测试&#xff0c;目的是对ES的使用方法及流程有个初步的认识。 3.1 创建索引库 ES的索引库是一个逻辑概念&#xff0c;它包括了分…

05-传统开发模式DAO

传统开发模式DAO 目录 定义接口 CustomerDao.java实现接口 CustomerDaoImpl.java测试类在传统开发模式DAO下&#xff0c;我们自己先定义好接口&#xff0c;然后再去定义实现类&#xff0c;在实现类中实现接口的操作。到时候只需要创建一个 dao 对象&#xff0c;即可调用其中的…

AspnetCore 2.0 自动API文档生成组件,支持protobuffer

关于API文档自动生成&#xff0c;用于对APP端的开发帮助文档生成&#xff0c;默认ProtoBuffer传输格式。本项目并不是RESTful风格&#xff0c;是面向功能的API类型。ApiDoc的作用是根据定义好的API接口和注释来自动生成给内部开发者提供的API对接文档。欢迎Star一下&#xff0c…

P5127-子异和【线段树,树链剖分,位运算】

正题 题目链接:https://www.luogu.org/problemnew/show/P5127 题目大意 定义一个序列的子异和为所有自己的异或和的和。 然后有点权的树&#xff0c;要求支持路径异或和路径求子异和。 解题思路 首先树链剖分是肯定的&#xff0c;然后我们考虑用哪个数据结构。 从每个位单独…