使用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,一经查实,立即删除!

相关文章

P4248-[AHOI2013]差异【SAM or SA】

正题 题目链接:https://www.luogu.com.cn/problem/P4248 题目大意 TiT_iTi​表示后缀i∼ni\sim ni∼n 一个字符串求 ∑i1n∑jinlen(Ti)len(Tj)−2∗lcp(Ti,Tj)\sum_{i1}^n\sum_{ji}^nlen(T_i)len(T_j)-2*lcp(T_i,T_j)i1∑n​ji∑n​len(Ti​)len(Tj​)−2∗lcp(Ti​,Tj​) 解题…

14、ORACLE下的基本SQL操作

ORACLE下的基本SQL操作 1.获取表字段 select * from user_tab_columns where Table_Name用户表 order by column_name2.获取表注释 select * from user_tab_comments where Table_Name用户表 order by Table_Name3.获取字段注释 select * from user_col_comments where Table_…

暗黑破坏神(ssl 2295)

暗黑破坏神(ssl 2295) Description 无聊中的小x玩起了Diablo I... 游戏的主人公有n个魔法 每个魔法分为若干个等级,第i个魔法有p[i]个等级(不包括0) 每个魔法的每个等级都有一个效果值,一个j级的i种魔法的效果值为w[i][j] 魔法升…

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

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

P4287-[SHOI2011]双倍回文【PAM】

正题 题目链接:https://www.luogu.com.cn/problem/P4287 题目大意 长度为nnn的字符串。定义wRw^RwR表示字符串www的翻转。 一个双倍回文可以表示为wwRwwRww^Rww^RwwRwwR且这是个回文串。 求最长的子串是双倍回文。 解题思路 我们在构建PAMPAMPAM的时候维护一个halfhalfhal…

2020-09-18

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

低价购买(洛谷 1108)

低价购买(洛谷 1108) 题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购…

.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主…

P4762-[CERC2014]Virus synthesis【PAM,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4762 题目大意 长度为nnn的目标串,开始一个空串,可以执行以下操作 在头或者尾加一个字符复制一个该串的逆串放在后面 求最少操作次数。 解题思路 我们可以知道答案肯定是一个回文串然后剩下的暴力…

I - Trade Gym - 100212I 网络流

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

1、Spring简介

1、Spring是什么? Spring是一套用于开发J2EE应用程序的轻量级框架,其两大核心是IOC和AOP,也就是提供一个bean统一管理容器,提供面向切面编程的基础。 2、为什么要用Spring? 1)使用Spring肯定是为了简化开…

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

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

P6015-[CSGRound3]游戏【树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P6015?contestId25945 题目大意 nnn张牌&#xff0c;玩家111从顶拿若干张&#xff0c;之后玩家222拿若干张。 若牌的和大于KKK那么分数为0否则为牌的和。 求KKK为多少时玩家111必胜。 解题思路 我们枚举玩家111拿多少张&a…

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

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

【深搜】骑士游历(二)

骑士游历&#xff08;二&#xff09; 问题描述&#xff1a;设有一个nn的棋盘&#xff08;n≤10&#xff09;&#xff0c;在棋盘上的任意一点A(x,y)有一中国象棋<马>,<马>走的规则同前&#xff0c;但取消<马>只能向右走的条件。试找出一条路径&#xff0c;使…

P3449-[POI2006]PAL-Palindromes【结论题,字符串hash】

正题 题目链接:https://www.luogu.com.cn/problem/P3449 题目大意 nnn个回文串&#xff0c;求有多少对回文串有序拼接可以形成一个新的回文串。 解题思路 结论:当两个回文串的最短循环节相同时两个拼接起来就是一个新的回文串。 这里感性证明一下&#xff1a; 若两个回文串…

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

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

2-sat模板- 输出可行解

自己写的代码 using namespace std; const int maxn 1e6; int head[maxn]; int DFN[maxn],LOW[maxn],stk[maxn],visit[maxn],belong[maxn]; vector<int> scc[maxn]; int tot,idx,cnt,sccnum; int n,color[maxn],degree[maxn],pos[maxn]; struct Es{ int v; int next; in…

读从电子到产品

1、用户的量不重要&#xff0c;质更重要&#xff0c;要让用户真正跟你的产品产生很强大的关系&#xff0c;要看解决问是不是够好、够快、够准&#xff0c;在解决问题的时候&#xff0c;要保证产品真正能满足用户的需求。 2、你认为的问题&#xff0c;别人未必觉得是问题&#…

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

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