我们可以并行构建多个门控签到吗?

Can we build multiple gated check-ins in parallel?

假设我们在 TFS 2015 中继续使用 XAML 门控签入的构建定义,因为 vNext 系统不支持它们,是否仍然有可能获得多个门控签入 运行并行?

我知道构建设置中有一个并行选项 UI 但我不知道它是否也可以应用于 XAML 构建定义,以及还有哪些其他限制.

你能在同一个盒子上并行构建吗(只要它支持多个代理)?

您可以在一台机器上安装任意数量的构建代理。构建代理并行运行。两个构建系统都是如此。

基于

XAML 的相同定义的门控构建不能 运行 并行。我相信这是一个有意的限制。门控构建的目的是防止“损坏的”代码被提交到存储库。

当您对门控构建进行排队时,它会使用存储库中最新版本的代码,以及包含您刚刚提交的更改的搁置集。如果构建成功,则搁置集被提交并成为代码的最新版本。如果构建失败,则搁置集不会提交到存储库。

如果第二个门控构建同时排队 运行 那么它无法知道第一个构建是成功还是失败,因此无法知道构建的版本(它应该使用最新版本还是当前正在验证的搁置集)。如果第一次构建失败,那么第二次构建就可以了。但如果第一次构建成功,则第二次构建不会针对正确版本的代码进行编译。更糟糕的是,第二个搁置集可能包含与第一个搁置集不兼容的更改,如果第二次构建成功,您可能会遇到合并冲突或损坏的代码。这违背了门控构建的目的。

门控签入即将用于构建 vNext,但我希望它们具有相同的限制。

门控构建与“CI”构建。

Gated:如上所述,gated 构建不能 运行 并行。当正确性比速度更重要时,应该使用它们。

CI:TFS 中的 CI 构建是更传统的触发构建。当开发人员签入更改时,这将提交到 repo 并触发构建。此时代码可能会被破坏(无法编译,导致单元测试失败等)CI 构建可以 运行 并行但增加了破坏代码进入回购的风险,并且一个开发人员的错误可能会对团队的其他成员产生影响。

想法: 根据您的 b运行ching 策略,您可以混合使用构建类型。例如,CI 建立在 dev b运行ches 上,它有很高的更改周转率,但如果构建每天中断几分钟,那么它不是世界末日。只有开发团队受到影响,他们可以快速解决任何问题。为营业额较低的 b运行ches 使用门控构建。例如,您的 Main 或 Release b运行ch 只能在 sprint 结束时更新。

意见: 门控构建原则上听起来是个好主意,它们可以防止损坏的代码污染您的源代码控制库。这是一件好事。然而对我来说,快速反馈更重要。恕我直言,门控构建更像是一个垫片,以防止“不体谅”的开发人员在提交之前不检查他们的代码编译或通过测试。当然,我们都可能犯错,但两种构建的存在都是为了告诉我们这一点,并让我们有机会修复错误。

本质上我想我是这么说的。

CI:我可以信任代码吗?

Gated:我可以信任开发人员吗?

如果您制定了“永远不要破坏代码”的政策,那么您将不得不忍受封闭构建的限制。如果您可以更灵活一点,并且您相信团队的其他成员不会做任何愚蠢/不体贴的事情,那么您可以使用 CI 构建并获得并行构建的好处。

更新:2020 年 9 月 Buid vNext,现在称为 Azure DevOps Pipelines。 Gated Checkins 的工作方式与基于 XAML 的构建相同,并且不能 运行 并行。这是给 TFVC 用户的。 Git 用户可以通过在他们的 B运行ch 策略(拉取请求)上使用构建验证来使用类似的功能