【问题标题】:Dependent builds in VSTSVSTS 中的依赖构建
【发布时间】:2018-08-12 17:07:40
【问题描述】:

我有一个 VSTS GIT 存储库,所有 UI、服务、代码都在同一个存储库中。成功构建会生成安装程序 (.msi) 以安装应用程序。

随着时间的推移,我的存储库已经发展壮大,其中包含大量代码。对于每个小的代码更改和新构建获取触发器(门控签入)。当前构建定义构建所有组件(UI 和服务),即使更改仅在一个组件中。请注意,组件之间没有直接引用。总的来说,我认为它是维护存储库的单一方式。

我现在计划将 GIT 存储库分解为一组存储库。每个 repo 都有自己的构建定义。现在考虑以下用例

UI 和服务发生了变化,服务代码更改存在一些问题。当开发人员签入代码时,它将同时构建 UI 和服务。

  1. 在第一种方法中,构建会中断(因为服务代码有问题)UI 和服务代码更改都不会被签入。

  2. 在第二种方法中,UI 构建将成功并且代码将被签入,但对于服务代码更改将被拒绝,因为构建会中断。

问题 在 VSTS 中是否可以创建依赖构建定义?我的意思是如果构建 1 (Repo1) 失败然后拒绝构建 2 (repo 2) 的代码更改

阿图尔·苏雷卡

【问题讨论】:

    标签: git build msbuild azure-devops azure-pipelines


    【解决方案1】:

    一种可能的方法是使用Trigger another build task 并指定Condition

    【讨论】:

      【解决方案2】:

      不同的构建定义之间没有依赖关系。

      由于 UI 和 Service 是相互依赖的,因此您应该在同一个构建定义中构建和验证它们。

      为了减少构建时间,您可以设置私有构建代理,并且在构建过程中不清理源(在获取源的清理框中选择 false)

      要在另一个存储库中获取代码,您可以通过命令行任务调用 git 命令(例如 git clone)。

      【讨论】:

      • UI 中没有直接引用服务。无需编译服务即可构建 UI 代码。将所有东西放在一个仓库中听起来并不正确,从长远来看肯定行不通。清洁源选项已禁用。我已经有 5 个代理,但如果构建时间很长,我将无法获得多个代理的实际优势。如果我们破坏了构建和多代理进程,那么它会很快。正确吗?这样,打破当前构建更有意义。
      • @AtulSureka 是的,服务不需要编译来构建 UI,但它们取决于您的要求,例如,如果服务有,则 UI 中没有显示的内容被打破了。您可以通过 REST API 取消其他构建,但您无法控制不同构建的顺序,例如,当 UI 和服务代码都更改时,UI 构建开始/验证在服务构建之前。因此,在相同的构建定义中执行此操作是一种简单的方法,如果不清理源代码,项目将构建得更快。
      • 感谢您的回复,我没有使用干净的构建。这不仅仅是 UI 和服务。如果有多个服务(它们之间没有直接引用),如果只有一个服务有代码更改,我为什么要构建所有服务。我认为它不适用于构建整个产品需要一个多小时的大型企业产品。更重要的是,如果启用了门控签到。
      • @AtulSureka 在我看来,更好的方法是您可以为每个服务创建多个分支(例如 dev、master),gated check-in 用于 dev 分支并发布/部署服务到开发服务器。然后通过拉取请求(可以以编程方式创建)和构建验证(用于构建必要服务和 UI 的新构建定义)合并从 dev 到 master 的更改。用户界面也是如此。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2018-07-11
      • 2021-08-18
      • 1970-01-01
      • 2015-08-12
      相关资源
      最近更新 更多