我们可以并行构建多个门控签到吗?
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 策略(拉取请求)上使用构建验证来使用类似的功能
假设我们在 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 策略(拉取请求)上使用构建验证来使用类似的功能