使用TFS CI/CD 完成 VSTS 插件自动化部署和发布

Visual Studio Team Service 经过了13年的版本演进和5年的在线运营,现在已经是最成熟的商用DevOps工具链,Marketplace作为VSTS为全球开发者提供各种类型的插件市场,为Visual Studio, Visual Studio Code和Visual Studio Team Service本身提供了大量的插件帮助我们提高工作效率,当前这里已经聚集了总数超过15000个各种类型的插件,是开发人员最丰富的装备库。


Pull Request Diff Copy 插件背景


在之前的一篇文章《devops文档中心技术演进》中我提到了当前我们的文档中心(https://docs.devopshub.cn)已经积累2000多份文档和超过2G的数据量,前段时间我们对这个站点进行了一次全量发布(删除现有服务器,从新部署),整个部署过程用时1小时45分钟


640?wx_fmt=png&wxfrom=5&wx_lazy=1


这个时间非常夸张,如果每次我们修改文档中心都要等待将近2个小时,这是让人无法忍受的。因此,我们团队的厉晓明同学开始研究如何能够实现增量发布,也就产生了以下这个名为 Pull Request Diff Copy 的插件。


插件地址

https://marketplace.visualstudio.com/items?itemName=lean-soft.pull-request-

diff-copy


GitHub地址

https://github.com/lean-soft/pull-request-diff-copy


640?wx_fmt=png&wxfrom=5&wx_lazy=1


这个插件的工作机制很简单:借助VSTS/TFS中的分支策略,当开发人员创建了拉取请求(Pull Request)或者对已经存在的拉取请求进行更新的时候,CI自动化构建会被触发,在这个构建中,这个插件会检测拉取请求中两条分支的(feature branch和master branch)的差异,并将差异文件抽取出来,形成增量文件包。


如下图是在 devops文档中心 的CI中所配置的 Pull Request Diff Copy 插件,你只需要配置目标文件夹


640?wx_fmt=png


通过PullRquest触发以后,这个任务会被执行并抽取差异文件,如下log输出


640?wx_fmt=png


最终形成和PullRequest一致的差异文件包,供CD流水线中的后续任务使用


640?wx_fmt=png


利用这个插件,我们把CI/CD整个流水线的执行时间降低到了1分钟之内,开人员可以在更新了feature分支后几十秒内看到站点上的状态变化;大大提高了效率。


插件部署和发布流水线的实现


为了能让这个插件本身的开发,测试和发布到VSTS Marketplace的过程更加顺畅,我们还为这个插件也搭建了CI/CD。因为这是一个build task extension,所以测试它必须在一个已有的CI构建中进行,同时由于这个插件必须有Pull Request的Context才能运行,所以为了测试这个插件至少要有这几个步骤:

1) 修改代码
2) 更新版本号(不更新版本号是无法发布到市场的)
3) 使用tfx工具打包成vsix包
4) 安装/更新vsix包到测试用的tfs/vsts服务器
5) 触发构建,查看日志


如果测试失败,以上过程还要重复;在修复一个小问题的过程中,修改代码可能只需要1分钟,但是打包部署一次就要至少5分钟,效率非常低。


以下是我们搭建的自动化部署流水线,第一个环境使用我们自己公司的tfs服务器作为这个插件的测试环境,因为以上 devops 文档中心 的CI中使用了这个插件,所以我们可以直接使用以上那个CI来测试这个插件;这个测试通过后,经过一个手动审核触发才会把测试好的版本发布到VSTS Marketplace,同时也把代码同步到github,完成整个发布流程。


640?wx_fmt=png


我们在流水线中还使用Build.BuildId来替换vsix的版本号,这样开发人员就不必每次更新版本号,只需要专注于编写逻辑代码,剩下的事情都交给TFS来完成了。



640?wx_fmt=png


希望 Pull Request Diff Copy 这个插件可以帮到大家,如果大家使用中遇到问题,请随时通过 Github 给我们提交反馈,谢谢。


提交反馈地址:https://github.com/lean-soft/pull-request-diff-copy/issues


相关文章:

  1. DevOps文档中心的技术实践演进

  2. 微软研发云全家桶VSTS登陆中国

  3. Markdown/reST 文档DevOps流水线

  4. 7 款好用的Git GUI客户端工具

  5. 使用 SSH 连接 TFS/VSTS 的GIT仓库

  6. GitHub + VSTS 开源代码双向同步

  7. .NET Core 从 Github到 Nuget 持续集成、部署

原文地址 :http://devopshub.cn/2018/04/07/tfs-cicd-for-vsts-extension/

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

640?wx_fmt=jpeg

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

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

相关文章

用C# (.NET Core) 实现迭代器设计模式

本文的概念来自深入浅出设计模式一书项目需求有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单.这两个菜单是这样的:菜单项MenuItem的代码是这样的:最初我们是这样设计的, 这是第一份菜单:这是第2份菜单:同时有两个菜单存在的问题问题就是多个菜单把事情…

2020-09-18

1.处理调用子组件方法时,报错undefined问题 2.var 、const 、let区别 3. curl -X GET --header "Accept: */*" "访问地址" 4.mysql中的日期格式化 5. ant-design-vue-jeecg

.NET Core/.NET之Stream简介

之前写了一篇C#装饰模式的文章用.NET Core实现装饰模式和.NET Core的Stream简介 提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容).NET Core/.NET的Streams首先需要知道, System.IO命名空间是低级I/O功能的大本营.Stream的结构.NET Core里面的Stream主…

I - Trade Gym - 100212I 网络流

网络流好题 给出A、B两个点集,A、B之间有边相连,而A和B的内部均无边相连。 题目要求求出最多删除A、B之间的多少边,才能使得A中点的度数至少都为2,B中点的度数也至少都为2。 先求出每个点的度数,从每个点v出发&…

【深搜】骑士游历(ssl 1277)

骑士游历 Description 如下图所示有m*n(n,m<15)一个棋盘&#xff0c;在棋盘左下角的A&#xff08;1,1&#xff09;点&#xff0c;有一个中国象棋〈马〉&#xff0c;并约定马走的规则&#xff1a; ①走日字&#xff1b;②只能向右走。 Sample Input &#xff19; &…

修复迁移后Net Standard项目中的错误

接上一章&#xff0c;项目编译结果如下&#xff1a;解决依赖dll引用在Net Framework项目的引用如下&#xff1a;各引用和作用&#xff1a;log4net(1.10.0.0) 用于写框架日志Castle.DynamicProxy(1.1.5.1) 用于代理类生成Micosoft.Practice.EnterpiseLibrary 微软企业库&#xf…

迁移Net项目为Net Core\Standard项目

背景&#xff1a;我们公司内部有自己ORM开发框架&#xff0c;最新因为需要将系统迁移到国产服务器上&#xff0c;所以首先需要将最基础的ORM框架改造可以运行在国产服务器上。对于我们Net来说&#xff0c;优选Net Core。在迁移的过程中&#xff0c;将一些经验和坑记录下来&…

迁移后的Net Standard版本的类库测试和多平台项目实测

按照第一步的方法&#xff0c;添加一个Net Core的MSTest项目&#xff0c;然后将原来的测试项目下的代码迁移到新测试 项目中&#xff0c;然后引用新的Beyondbit.Framework Core类库。然后运行单元测试项目和集成测试项目即可。测试当中单元测试下项目没有问题&#xff0c;一遍就…

.Net Core小技巧 - 使用Swagger上传文件

前言随着前后端分离开发模式的普及&#xff0c;后端人员更多是编写服务端API接口。调用接口实现文件上传是一个常见的功能&#xff0c;同时也需要一个选择文件上传的界面&#xff0c;可以编写前端界面上传&#xff0c;可以使用Postman、curl来模拟上传请求。上述的方式多多少少…

容器化分布式日志组件ExceptionLess的Angular前端UI

写在前面随着微服务架构的流行&#xff0c;日志也需要由专门的分布式日志组件来完成这个工作&#xff0c;我们项目使用的是 ExceptionLess 这个组件&#xff0c;它是前后端分离的&#xff1b;这篇文章我们就来实践容器化 ExceptionLess 的前端&#xff0c;并为其包含一个 nginx…

EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

前言很长一段时间没有写博客了&#xff0c;今天补上一篇吧&#xff0c;偶尔发现不太愿意写博客了&#xff0c;太耗费时间&#xff0c;不过还是在坚持当中&#xff0c;毕竟或许写出来的东西能帮到一些童鞋吧&#xff0c;接下来我们直奔主题。无论是在在EF 6.x还是EF Core中对于原…

1、play编程基础

1、Action、Controller、Result Action指的是动作&#xff0c;play中大多数请求可以使用action来处理&#xff0c;一个请求对应一个动作也就是一个java方法&#xff0c;然后处理请求返回一个响应&#xff0c;这个响应用Result来体现 Controller就是一个继承了 play.mvc.Contro…

【动态规划】城市交通

城市交通 Description 有n个城市&#xff0c;编号1~n&#xff0c;有些城市之间有路相连&#xff0c;有些则没有&#xff0c;有路则当然有一个距离。现在规定只能从编号小的城市到编号大的城市&#xff0c;问你从编号为1的城市到编号为n的城市之间的最短距离是多少&#xff1f…

AspNetCoreApi 跨域处理(CORS )

如果咱们有处理过MV5 跨域问题这个问题也不大。&#xff08;1&#xff09;为什么会出现跨域问题&#xff1a;浏览器安全限制了前端脚本跨站点的访问资源&#xff0c;所以在调用WebApi 接口时不能成功访问资源&#xff0c;原因“同源策略”的存在&#xff1a;同源指以下几点相同…

业务配置开发平台qMISPlat 2.0 产品介绍

qMISPlat是什么qMISPlat(业务配置开发平台)是一套基于.net core 2.0、跨平台的&#xff0c;面向开发人员和具有一定技术水平的业务人员使用的业务配置开发平台。基于此平台您只需通过配置和少量开发即可快速搭建满足用户需求的业务系统&#xff0c;大大降低项目开发工作量。平台…

2、异步HTTP编程

1、处理异步结果 在内部&#xff0c;play框架是自下而上异步的。Play以异步、非阻塞方式处理每个请求。应用程序代码应尽量避免阻塞控制器&#xff0c;这种阻塞操作的常见例子有JDBC调用、流式API、HTTP请求和长计算。因此应尽量通过保持控制器异步的方法使得应用进行扩展&…

3、play中的模板引擎

1、模板格式 Play默认的模板引擎是一种基于scala的安全模板引擎&#xff0c;尽管模板引擎使用Scala作为表达式语言&#xff0c;但是非常简单易学。参数类型使用后缀语法指定&#xff08;例如&#xff1a; id&#xff1a;Long&#xff09;&#xff0c;泛型类型是使用[]符号&…

.NET Core调用WCF的最佳实践

现在.NET Core貌似很火&#xff0c;与其他.NET开发者交流不说上几句.NET Core都感觉自己落伍了一样。但是冷静背后我们要也看到.NET Core目前还有太多不足&#xff0c;别的不多说&#xff0c;与自家的服务框架WCF集成起来就不咋地&#xff0c;从最初不支持&#xff0c;到现在有…

4、表单提交和验证

1、启用/禁用表单module sbt启动应用时默认就启用了表单&#xff0c;也可以在build.sbt中添加启用libraryDependencies javaForms&#xff0c;想要移除表单时使用PlayMinimalJava 插件 2、play接收表单数据 play.data中的类可用于处理HTTP表单数据提交和验证&#xff0c;操…

【贪心】最佳浏览路线问题

最佳浏览路线问题最佳浏览路线问题最佳浏览路线问题 题目描述 某旅游区的街道成网格状&#xff08;见图&#xff09;&#xff0c;其中东西向的街道都是旅游街&#xff0c;南北向的街道都是林荫道。由于游客众多&#xff0c;旅游街被规定为单行道。游客在旅游街上只能从西向东…