作为一名软件开发者,我亲身体会到快速低成本地构建高质量的产品是一件多么困难的事情。它就像是一门艺术,有时候我们会成功,有时候却会演变成类似于奥巴马时代医疗保健政府网站那样的东西。我们对最终产品的控制水平各不相同,如果要归咎责任,最终往往会落到决策层中错误的人身上。微软的Azure DevOps(前身是Visual Studio Team Services)尽管表现出良好的意图,但却是一场决策糟糕和执行不力的完美风暴。

从高层次来看,这个产品看起来棒极了。它为问题跟踪、CI、版本控制、项目管理等问题提供了一个一体化的解决方案。可惜的是,它的复杂性却很成问题。在更新问题后,其他屏幕常常不刷新,无法让人知道发生哪些了变更。例如,更新工时或设置工作量不会触发图表自动更新,需要手动刷新页面。虽然这些问题看起来都是局部的小问题,但放在一起就会导致整个产品在完成日常任务时变得非常困难。

老实说,到目前为止所提到的一切问题都还是可接受的,尽管很不幸。每种工具都有它的问题,而真正“磨砺我的意志”的是CI系统,他们称之为管道。在我看来,CI的实现非常糟糕。不完整的Github集成(GitHub现在是微软的)、通过代理运行的构建会随机崩溃、到2019年仍然不提供任何形式的构建缓存,相比其他工具(如GitLab、CircleCI、Travis,等等),这是一款令人失望的产品。

这篇文章的主要目的是帮助读者节省时间,避免在使用这个工具时犯下我曾经犯过的一些错误。其次,我也希望找到微软能够做决定的人,并说服他们尽快解决这些问题——毕竟,我们为这个工具付了钱。最后,我想澄清一下,我已经就多个问题联系了微软支持部门,但都没有得到解决。

查看构建状态

分辨率问题

奇怪的是,如果你的显示器不够大,那么构建信息页面会隐藏掉大量的数据。即使使用标准的1920x1080分辨率,也不可能一次看到所有列。你肯定在想:“这家伙不知道怎么使用水平滚动条”。事实上,我当然知道如何使用水平滚动条,但微软却不知道。

几乎不显示关于每个构建的信息,而且没有水平滚动条。被隐藏掉的区域是一些代码提交及其作者的信息,还有一些是我所在公司的信息和其他敏感信息。

换了大显示器,可以看到更多的列,但仍然不够大,因为无法看到所有的列。

你们可能想知道在手机上是怎样的,但实际上这个工具的CI区域完全不支持手机。即使你在手机上使用桌面模式,因为无法更改屏幕大小,大多数列仍然是看不到的。据我所知,现在还没有原生的移动应用程序。

但愿你想看的只是分配给你的任务。

诡异的构建

一个真实而悲伤的故事

要么是微软的网络,要么是CI代理服务,要么是两者的某种组合出现了问题。使用由微软托管的Linux代理,你会得到使用hypervisor运行Ubuntu的Windows服务器。通常,构建机器实例需要大约6GB的可用内存和两个E5 Xeon Intel内核。

在运行托管构建时,我们经历了由于机器消失而导致的高构建失败率。这些失败的构建随机发生,有时甚至发生在构建开始之前。通常,导致构建失败的原因都是一样的:“与服务器失去通信”。我们花了几个月时间寻求帮助,希望这个问题能够得到解决,但最后还是决定在AWS上构建自己的自托管代理。我们希望它能解决所有的问题,而它确实做到了!我们的构建非常快,但在十分钟后,又出现了“与服务器失去通信”。

不幸的是,这个问题不仅出现在它们的托管代理上,而且似乎还影响到在我们自己的实例上运行的自托管代理。在进一步诊断这个问题之后,我发现EC2实例完全没有响应。好吧,我想,一定是服务器坏了或者出了其他什么问题。我关掉了旧实例,创建了一个新实例,并再次设置代理。现在一切又好起来了!

在头几个小时内,构建运行得很顺利。正如预期的那样,代理最终在一次构建过程中又死掉了。构建作业开始排起了长队,我越来越沮丧,AWS通知我说我们的实例出了问题。一个小时后,面对反应迟钝的服务器,我还是命令它重新启动。为了调试这个问题,我查看了传统的日志存储位置,如dmesg、kern和var。但我仍然无法找到任何根本原因,也找不到任何迹象表明发生了什么。

检查构建

要不要记录日志

要不要记录构建日志?这是最奇怪的实现决策之一。如果在触发构建时已经打开了构建信息页面,那么就可以看到整个构建的历史。如果你是一般用户,并且在几分钟内没有查看构建过程,那么你只能看到从加载当前运行步骤的构建日志开始的历史记录。而作为Android开发人员,我看到的第一个构建输出通常是这样的:app:assembleDebug—日志的开头部分丢失了。我们可以在构建完成后通过刷新页面查看整个日志,但这样通常会浪费很多时间。

亲爱的缓存

给我缓存吧

如果我告诉你微软绝对没有提供任何形式的构建缓存,你可能不会相信。因此,我直接贴出链接https://visualstudio.uservoice.com/forums/330519-azure-devops-formerly-visual-studio-team-services/suggestions/32044321-improve-hosted-build-agent-performance-with-build,有人呼吁微软推出这个功能,而微软表示正在考虑要实现它。微软确认他们从2018年2月开始解决这个问题,但现在已经是2019年了,什么进展都没有。这个问题很烦人,同时又衍生出另一个完全不同的问题。如果你用谷歌搜索“azure devops 504 gateway”,你会发现有很多用户在构建时也遇到了网络问题,包括我在内。据推测,构建缓存的缺乏正在压垮他们的网络,导致他们的构建服务器被包存储库系统拒绝。在我们的构建中,经常遇到HTTP错误,下载依赖项导致了不稳定的构建。我们跟踪由网络问题导致的大量构建失败,不包括前面描述的“通信丢失”导致的失败百分比。有时构建甚至无法连接到Github。

微软拥有自己的云服务,却在CI实现中缺少缓存,这让我感到非常困惑。市场上的其他CI产品,如Circle、Travis、Jenkins等,通常都有缓存实现,并将缓存视为CI流程的基本部分。

失败的构建

Github是谁?

CI的另一个有趣的问题是与Github之间的通信。当构建失败时(例如CI系统不稳定),通过仪表盘重新排队的构建作业在完成时不会更新Github。也就是说,你必须推送错误的提交,或者将推送变更强制到拉取请求上,以便触发新的构建来更新GitHub拉取请求。作为Travis和Circle等系统的坚定支持者,我说服了很多人为这些服务掏钱。它们通常运作得很好,不会出现上述的问题。不管怎样,我和我的同事每周都要花很多时间来处理微软的这个问题。

英文原文:https://toxicbakery.github.io/vsts-devops/microsoft-devops-ci/

用户吐槽:Azure DevOps CI 体验太差相关推荐

  1. 博客园markdown体验太差,溜了

    是这样 转载于:https://www.cnblogs.com/QEStack/p/8631166.html

  2. Azure DevOps Server 的连接源(Artifacts):五、python包管理pip和twine

    1. 安装artifacts-keyring 参考:https://pypi.org/project/artifacts-keyring artifacts-keyring是程序包keyring的扩展 ...

  3. Azure DevOps Server CI - 自搭跨平台容器代理Agents

    前言 最近在地端(On-premises)幫團隊搭一套CI/CD流程,也順帶整理了一下從無到有的搭建過程,這次使用了docker技術來解決現有團隊使用CI/CD時讓現有CI/CD hosting環境過 ...

  4. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  5. 在阿里云开通SSL后,网站PING不通!再说一下 阿里云的服务响应和体验真心的太差!!你们有没有同感?

    为什么我网站开通SSL后,PING不通网站 *我昨天在阿里云上开通了SSL,然后用CDN加载后,网站可以打开,但本地就是PING不通我们的网站 本地 运行–CMD-回车 ping www.shmeky ...

  6. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(三.实现CD持续部署管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  7. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  8. 使用Azure DevOps Pipeline实现.Net Core程序的CI

    上次介绍了Azure Application Insights,实现了.net core程序的监控功能.这次让我们来看看Azure DevOps Pipeline功能.Azure DevOps Pip ...

  9. 【转】Azure DevOps —— Azure Board 之 长篇故事、特性、用户情景(故事)的用法应用场景

    前提 我以前在之前的文章里大概介绍了 Azure Board 的基本使用,可以回看<Azure Board 的基本使用>.如果你想使用 Azure Board 来安排工作的话,请提前了解& ...

最新文章

  1. 第四层到第七层的高层交换技术及其应用
  2. 注意力不集中的判断标准
  3. jupyterlab debugger+显示图片
  4. Python3实现ICMP远控后门(上)
  5. 新海诚没有参与制作的作品_新海诚作品不出真人版,其实都是因为这!
  6. 2021年7月份学习总结,多套WebFuture的系统部署(简易版)
  7. jenkins角色权限管理
  8. 一次性上传多个文件到服务器端(一)
  9. Zabbix监控多个JVM进程
  10. mysql 主从 sql线程no_Mysql 主从同步 slave_sql_running 为no
  11. transition:background-color .3s 背景色 - 渐变效果
  12. 网盘工具比较,以及自己开发的网盘工具[转]
  13. 怎样在MyEclipse中连接Oracle数据库
  14. 单元测试框架-Junit
  15. Biorhythms 中国剩余定理
  16. js实现简易版 替换模板中对应变量
  17. linux dump备份svn,svnadmin dump+load库中的某个目录用svndumpfilter 可实现
  18. eda技术试卷_EDA技术及应用试卷D含答案
  19. ASP.NET公司企业网站源码
  20. Pseudo Labelling

热门文章

  1. 这个勒索软件也太菜了!
  2. 2020年,对薪资不满意的程序员要注意了...
  3. Ubuntu 16.04 amd64 bond mode6 配置
  4. 创建符合标准的、有语意的HTML页面——ASP.NET 2.0 CSS Friendly Control Adapters 1.0发布...
  5. Vue 2.5中将迎来有关TypeScript的改进!
  6. Linux系统管理工具-iostat、free、ps、netstat、tcpdump
  7. 邓海建:让网约车成为智慧城市的“老司机”
  8. 看看android基础知识,谁帮我作答
  9. Android -- Intent
  10. 《中国人工智能学会通讯》——4.41 两种学习之间有什么区别?