【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

用户吐槽:Azure DevOps CI 体验太差

  • 2019-01-29
  • 本文字数:2595 字

    阅读完需:约 9 分钟

用户吐槽:Azure DevOps CI 体验太差

作为一名软件开发者,我亲身体会到快速低成本地构建高质量的产品是一件多么困难的事情。它就像是一门艺术,有时候我们会成功,有时候却会演变成类似于奥巴马时代医疗保健政府网站那样的东西。我们对最终产品的控制水平各不相同,如果要归咎责任,最终往往会落到决策层中错误的人身上。微软的 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/


2019-01-29 08:005766
用户头像

发布了 731 篇内容, 共 433.3 次阅读, 收获喜欢 1997 次。

关注

评论 1 条评论

发布
用户头像
看来国内基本上没有人用啊
2019-04-23 08:56
回复
没有更多了
发现更多内容

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

Java架构追梦

Java 架构师

拿了阿里、腾讯的offer的大佬给想进互联网大厂的程序员一个忠告

Java架构追梦

Java 阿里 程序员面试

吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软

Java架构追梦

Java 程序员 后端开发

Harbor v2.5远程复制:制品的签名如影随形

亨利笔记

架构、框架侃侃而谈算法望而却步?吃透这份笔记轻松掌握算法技能

Java架构追梦

Java 架构

模块9-设计电商秒杀系统

卡西毛豆静爸

#架构训练营

Java并发JUC(java.util.concurrent)线程池

芝士味的椒盐

Java Java多线程 5月月更

AI大咖说-如何评价论文的创新性

AIWeker

人工智能 5月月更 论文写作

Android音视频——相关概念

程思扬

音视频 音视频开发

WebAssembly技术_编译ffmpeg(ubuntu20.04)

DS小龙哥

5月月更

撸了一个Spring Boot + VUE 框架开发的分布式网盘系统「源码开源」

Java架构追梦

spring java面试 后端开发

无死角窥探的焦虑:AI如何反击隐私侵占?

脑极体

在线Excel列提取导出工具

入门小站

工具

Android音视频——基础介绍

程思扬

音视频

leecode上的代码到pycharm运行解决历程

武师叔

5月月更

开源字节技术架构

源字节1号

软件开发 后端开发

在线模拟解析Crontab表达式执行时间

入门小站

工具

架构实战营毕业总结

卡西毛豆静爸

架构训练营

算法:动态规划-斐波那契数列问题

正向成长

动态规划

跑赚项目-stepn后续-如何月入过万(33/100)

hackstoic

投资 web3

TypeScript 原始数据类型

Emperor_LawD

typescript 基础 5月月更

linux手误rm可能不需要跑路

入门小站

Linux

四、应用高可用之容量设计

穿过生命散发芬芳

5月月更 容量设计

【JAVA秘籍功法篇-分布式事务】事务的实现原理

王老狮

分布式事务 CAP原理 BASE理论 ACID 事物的实现

Java并发JUC(java.util.concurrent)集合不安全

芝士味的椒盐

Java Java集合框架 5月月更

【愚公系列】2022 年 05 月 二十三种设计模式(四)-原型模式(Prototype Pattern)

愚公搬代码

5月月更

GitHub霸榜月余的24万字Java面试手册,竟是阿里机密

Java架构追梦

Java 程序员 后端开发

都说区块链可信,到底信了个啥?

亨利笔记

区块链

不可谓不“细”!阿里内部价值百万“微服务架构精髓”限时开源

Java架构追梦

Java 微服务 后端开发

渗透必备:Kali中安装漏洞靶场Vulhub

喀拉峻

网络安全 漏洞 渗透 靶场

Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档

Java架构追梦

Java 阿里 后端开发

用户吐槽:Azure DevOps CI 体验太差_DevOps & 平台工程_toxicbakery_InfoQ精选文章