在什么情况下,VSTS会自动为现有存储库目录创建新的存储库目录?

时间:2018-05-22 00:20:10

标签: azure-devops azure-pipelines

我的VSTS帐户下有一个回购已超过6个月了。我使用私有代理来构建它。 直到昨天,它在构建回购时使用C:\agent\_work\13路径。 从今天开始,它突然在C:\agent\_work\201创建了一个新目录并尝试构建项目。 这背后的原因可能是什么?

这是我当前目录结构在私有代理上的显示方式。

enter image description here

源根映射: enter image description here

enter image description here

如果有人知道如何解决此问题,请告诉我。

3 个答案:

答案 0 :(得分:1)

这不是问题,没有什么是错的,或者需要修复"。

构建定义可能已被删除并重新创建(或克隆,然后原始删除),导致它开始使用新文件夹。每个构建定义获取每个构建代理的唯一文件夹。

您不应该依赖于任何特定位置的构建。如果您当前正在这样做,那么您做出了错误的假设,并且需要开始使用built-in variables(例如$(Build.SourcesDirectory))来允许您透明地引用构建的工作文件夹。

答案 1 :(得分:1)

工作文件夹中有 SourceRootMapping 文件夹,有 Mappings.json SourceFolder.json 文件(SourceRootMapping{guid} folder{build definition id} folder\sourceFolder.json)在这个文件夹中。

因此,请检查 Mappings.json 文件中的 lastBuildFolderNumber SourceFolder.json 以查看现有映射。

您可以清除_work文件夹。

相关主题:Increment in _work directory

答案 2 :(得分:1)

我知道这是一个老问题,但我对此感到沮丧,并进行了一些根本原因的挖掘。

对 repo URL 的任何更改似乎都会创建一个新的 Work 文件夹。如果 Repository 名称、Project 名称或 Organization/Collection 名称发生变化,它将更改 repo URL,然后生成一个新的 SourceFolder.json 用于 SourceRootMapping 文件夹下的构建定义/管道。使用最新的 SourceFolder.json

您可以检查 SourceRootMapping 文件夹并尝试找到替换为新文件夹的工作文件夹的 definitionId 文件夹。如果您在 definitionId 目录下有多个文件夹,请检查这些文件夹中的 SourceFolder.json 文件,看看有什么不同,是什么更改了导致创建和使用新文件夹的内容。

例如:我的 D:\ADO-Terraform\_work\SourceRootMapping\542dccee-a265-44db-bae0-9b3f48d21793\1837 目录,1837definitionID(与工作文件夹编号不同),有 4 个 hashKey-它下面的命名文件夹。我有 1 个是我的原始版本,然后 1 表示我更改所使用的 repo 时,然后 1 表示我重命名正在使用的 repo 时,然后 1 表示我重命名此工作所在的项目时。

不幸的是,我认为没有办法“修复”它以使用旧文件夹。但正如其他人所说,您可以清除所有构建定义标记文件夹的工作文件夹(在您的示例中为 1-201),然后重置/清除 ma​​ppings.json 文件,这应该使您的代理从 1 开始。

在我得到“它应该无关紧要”或“使用系统变量”响应之前:我需要代理为每个构建使用相同的目录,因为我使用 Terraform 将一些简单的文件部署到我们的负载均衡器; Terraform 使用状态文件。如果状态文件不存在(例如当代理使用不同的工作文件夹时)Terraform 尝试在我们的负载平衡器上创建新文件,这会导致“文件已存在”错误。