使用 Azure Pipelines 的 Visual Studio Code
2018 年 9 月 12 日 João Moreno,@joaomoreno
我作为 Visual Studio Code 团队开发人员的职责之一是维护和改进我们的构建和持续集成 (CI) 基础设施。鉴于 Azure Pipelines 的最新功能公告,Visual Studio Code 团队已彻底改变了我们利用 Microsoft 技术的方式,为我们的开发人员和用户提供更好的协作平台。在这篇博文中,我将带您了解 Visual Studio Code 的历史,重点介绍我们的 CI 流程和工具,以及它们是如何随着时间的推移而发生变化的。
Visual Studio Code 工程
与任何其他开源项目一样,我们需要拥有合适的工具和功能来接收、分类和处理尽可能多的代码贡献。在开发人员工具领域尤其如此,用户本身就是开发人员:他们是一个充满热情、努力工作且非常高效的群体。截至这篇博文发布之时,我们有 148 个开放的 PR 以及 3,482 个已关闭的 PR,鉴于该项目 3 年的寿命,平均每天约有 3 个 PR。重要的是,我们有能力处理如此规模的贡献,不仅是为了保持项目的健康发展,也是为了帮助其他开源项目树立一个如何在如此规模下运作的榜样。我们实现此目标的方法之一是通过 将 PR 体验引入编辑器 来简化工作流程,但 CI 是大规模处理贡献的另一个重要部分。
直到最近,我们一直依赖于 OSS 社区为公共持续集成选择的默认选项:Travis CI 用于我们的 Linux 和 macOS 构建,以及 AppVeyor 用于 Windows。此外,我们使用 Coveralls 提供详细的测试覆盖率报告。这些服务为我们公共存储库上的 PR 和代码分支提供质量报告,因为它们自动执行 编译、运行 代码卫生检查 以及 执行多个测试 套件,所有这些对于维护具有大量传入贡献的分布式团队的质量至关重要。这种服务的组合需要了解和维护至少 3 个不同的系统,每个系统都有其自己的特殊文件格式、语法、怪癖、限制等。
采用 Azure Pipelines
今年早些时候,Azure Pipelines(当时是 Visual Studio Team Services)团队联系我们,希望尝试一些新东西。这个公告标志着我们向更加简化的持续集成解决方案转变。我们的构建现在可以在所有平台上同时运行,查看
为了完成这项转变,我们还需要做很多很酷的事情。让我们来分解一下
- Azure Pipelines 对公共项目的支持 使我们能够运行一个 面向公众的 Visual Studio Code 项目,我们所有的持续集成构建都在其中运行;
- 构建代理 在 Azure Pipelines 中长期以来一直支持 Windows、macOS 和 Linux 平台矩阵;
- Microsoft 托管代理 在 Azure Pipelines 中运行 macOS、Linux 和 Windows,提供了大量软件来构建项目,而无需担心构建机器的维护;
- YAML CI 允许创建 YAML 定义,这些定义保留在项目的源代码附近(Visual Studio Code 为此提供了 很棒的扩展)。
将所有这些结合在一起,我们终于能够专注于单一的 CI 解决方案。在 Azure Pipelines 上的 Visual Studio Code 构建 中,我们的编译、卫生检查和测试套件在单一构建中运行,自动将构建分布到不同的平台。由于我们使用的是 Microsoft 托管构建代理,因此我们无需担心维护这些机器。
第三方集成
Azure Pipelines 还提供 GitHub 集成,这使我们在 GitHub 项目页面(即在拉取请求中)获得了构建结果指标。
我们还构建了一个聊天机器人,它连接到 Azure Pipeline 的 REST API,并在构建中断时向我们的内部聊天提供通知。
展望未来
我的下一个任务将是利用 代码覆盖率报告 来获得比以前工具组合更好的端到端 CI 流。
迁移到 Azure Pipelines 已被证明对我们来说是一个巨大的成功。现在,由于构建不再分散在各处,因此总体代码质量更容易判断。我们还合并了构建定义文件的数量和格式。我们对这种改变感到非常高兴,并对 Azure Pipelines 的未来充满期待。
如果您想了解更多关于公共项目和 Azure Pipelines 的信息,请查看他们的 博文。
您想尝试一下 Visual Studio Code 吗?立即下载 您选择的平台。如果您像我们一样,总是想运行最新版本,那么可以 获取我们的每日构建的内部版本。您是否只是想联系我们或保持联系?在 Twitter 上关注我们 @code。
代表 VS Code 团队:祝您编码愉快!
João Moreno,@joaomoreno