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

1
5980

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分钟

vsix-01

这个时间非常夸张,如果每次我们修改文档中心都要等待将近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

vsix-02

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

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

vsix-03

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

vsix-04

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

vsix-05

利用这个插件,我们把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,完成整个发布流程。

vsix-06

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

vsix-07

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

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


相关文章:


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

qrcode_for_gh_b7c158df1fd1_430

1 COMMENT

Comments are closed.