使用 TFS build server/agent 和 GIT monorepo 快速构建

Fast build with TFS build server/agent and GIT monorepo

我们正在考虑将我们当前的 TFVC 团队项目整合到一个 GIT monorepo 中。

None 支持或反对 monorepos 的论据非常有说服力。我们现在在 TFVC 中链接不同的团队项目时遇到问题,这就是我们考虑 monorepo 的原因。我们考虑 GIT,因为 TFVC 在文件移动的合并和检测方面存在严重问题。这似乎落后了 10-20 年,即使直接告诉 Visual Studio IDE 这是一步而不是 delete/add.

我现在想知道使用 monorepo 时的构建速度。

构建代理是否足够聪明

从而加快进程?

或者通常是克隆整个 repo,我将不得不在构建之后执行任何构建步骤,如程序集版本控制,只对新构建进行更新,并且也是为了好的措施(总是有剩余的文件用于TFVC) 每周删除一次构建代理上的源文件?

关于多个构建定义:是否每个构建定义都必须获得自己的存储库克隆?总共会有 5 个构建,完全不同的解决方案以及主要解决方案的不同分支。

附加信息:团队很小(我们不是 Google),整个存储库大小约为 1-2GB。我们现在使用的是 TFS 2017,没有立即升级的计划。

only get what it needs (folders/files) 在使用映射 now.Unlike 的获取源步骤中,无法指定要下载的部分文件,似乎只有在使用 TFVC 时才可用。

因为 Git 依赖于完整的存储库 存在状态(提交是指向工作文件夹状态的指针,其中包括处于该状态的所有文件) ,不可能只抓取回购中的一些文件或文件夹。

但是,为了加快您的构建过程,而不是每次都获取整个 git 存储库。您可以设置 clean=false 并选中 shadow fetch 以仅在构建过程中获取修改过的文件。

Shallow Fetch: Allows you to download only the latest snapshot of the repository. Will download much faster, but may cause tools like GitVersion to fail (it relies on the history data to calculate a version number).

Clean: False: will retain the contents of the previous build allowing you to do incremental fetches of sources, incremental builds with tools that support it. You can combine Clean:False with a custom step which performs more targeted clean up.

Source Link:

有关更多详细信息,您还可以在我们的官方文档中查看 get source code part of Azure DevOps Git。

此外,如果您的存储库太大或其中的二进制文件太多。 考虑将其拆分为更小的存储库,或者如果它有很多二进制文件,则使用 Git-LFS 作为二进制文件。