【问题标题】:Share Git repository directory across multiple build definitions跨多个构建定义共享 Git 存储库目录
【发布时间】:2018-01-24 21:27:28
【问题描述】:

当私有代理在 VSTS 中开始构建时,它会被分配一个目录,例如C:\vstsagent_work\1\s

有没有办法将它设置为不同的路径?在其他 CI 服务器上,例如 Jenkins,我可以为作业定义自定义工作区。我正在处理一个巨大的 monorepo,并且在同一个存储库周围有几十个构建定义。在构建代理计算机上共享一个目录是有意义的(无论如何对我来说)。

对我的好处是我的构建可以使用来自上游存储库的预构建组件,如果它们已经构建的话。

感谢您的帮助

【问题讨论】:

  • 自有代理还是私人代理?
  • 您在 Visual Studio 2017.3+ 中查看过 Nuget packageReference 吗?这允许您设置一个仅采用最新版本的版本规范,或者允许您使用 MsBuild 属性为引用设置与您自己的项目相同的版本。
  • @jessehouwing,我正在使用私人代理。我真的不想再次走 nuget 路线。上次管理它所需的复杂性我被烧得很厉害。我想保持简单,目前的方法很简单,可惜效率低下。
  • 您是否在构建期间设置程序集版本?您有一个或多个构建定义吗?每个构建定义都有自己的工作区,并从旧版本的依赖项开始。如果它是一个包含很多条件的构建定义,则应该每次都将其重定向到同一个工作区/存储库。
  • 您可以关闭获取源步骤并调用git.exe 或tf.exe 作为构建的第一步。这样您就可以完全控制该位置,但您必须手动操作。

标签: visual-studio msbuild azure-devops azure-pipelines


【解决方案1】:

VSTS 构建始终为每个构建定义创建一个工作目录。这给你留下了两个选择:

  1. 创建单个构建定义并在步骤上使用条件来跳过某些步骤,以便仅运行所需的内容。这允许您使用标准步骤,并且可能需要一个 powershell 脚本来确定要运行哪些步骤以及要跳过哪些步骤。使用特殊的日志记录命令从 powershell 设置变量。
  2. 禁用获取源步骤并添加手动获取源的步骤。您需要清理工作目录,签出正确的提交,基本上手动复制获取源步骤中的操作。对于正常构建、拉取请求构建等,可能需要花些时间才能正确获取所有行为。这样您就可以完全控制检出源的位置。

我还建议您调查 2017 年的项目格式,这些格式在项目文件中使用新的 <packageReference> 来获取包。新系统支持配置版本范围,该范围始终可以获取最新可用版本的软件包。这是一个更好的长期解决方案。

【讨论】:

    【解决方案2】:

    不,它在 VSTS 构建系统中不可用。

    您可以更改代理的工作目录(C:\vstsagent_work)(重新配置并指定另一个工作文件夹),但它不会为不同的构建定义使用相同的源文件夹,文件夹将为 1、2 , 3 ....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2019-01-07
      相关资源
      最近更新 更多