跨多个容器共享代理工作目录 (C:\agent\work)
Share agent work directory (C:\agent\work) across multiple containers
我的设置包括一个 windows 服务器,上面部署了一些容器。每个容器都是一个构建 vsts 代理,可以执行构建和部署。我想弄清楚我是否可以在多个容器之间共享目录 C:\agent\work
以便拥有一个集中的工件目录。
为了共享 C:\agent:\work
我可以使用特定路径并创建每个容器,例如将卷映射到此目录
Container1: docker run agent1 -v C:\artifacts:C:\agent\work
Container2: docker run agent2 -v C:\artifacts:C:\agent\work
使用这个解决方案,但是我测试并能够确定每个容器将在每个自己的 SourceRootMapping 文件夹中保存内部版本号,并且每次两个容器都有相同的工作目录时将被覆盖。由于我需要保留工件几天,因此我无法继续使用此解决方案。
有没有办法让不同的 vsts 代理共享同一个 C:\agent\work
目录?
我需要共享这个目录,这样每个代理都可以找到从另一个容器创建的文件,例如,如果代理 1 在 C:\agent\work
下创建文件,我希望代理 2 可以访问这些文件,以便执行发布。
如您所见,您目前采用的方法无法可靠地发挥作用。您将无法使其可靠地工作。
解决方法很简单:不要尝试共享此文件夹。让每个容器中的每个代理创建自己的工作文件夹。
跨作业共享构建输出的方式是publish
它们。不要发布到文件共享,而是发布到 Azure DevOps——文件共享发布主要是 TFS 2013 及更早版本保留的遗留功能,近十年来都没有必要。
有关详细信息,请参阅链接文档。
我为这个问题选择的解决方案是将工件存储在单独的目录中,例如每个容器上的 C:\artifacts
。构建过程将使用 builID
和 $(artifactsPath) -> C:\artifacts
在唯一目录中输出工件
然后容器的 C:\artifacts
目录将在所有容器之间共享,并在主机上映射:
docker run --name image1 -v S:\artifacts:C:\artifacts
发布工件:
task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(build.BuildId)'
publishLocation: 'FilePath'
TargetPath: '$(artifactsPath)$(Build.DefinitionName)\drop'
我的设置包括一个 windows 服务器,上面部署了一些容器。每个容器都是一个构建 vsts 代理,可以执行构建和部署。我想弄清楚我是否可以在多个容器之间共享目录 C:\agent\work
以便拥有一个集中的工件目录。
为了共享 C:\agent:\work
我可以使用特定路径并创建每个容器,例如将卷映射到此目录
Container1: docker run agent1 -v C:\artifacts:C:\agent\work
Container2: docker run agent2 -v C:\artifacts:C:\agent\work
使用这个解决方案,但是我测试并能够确定每个容器将在每个自己的 SourceRootMapping 文件夹中保存内部版本号,并且每次两个容器都有相同的工作目录时将被覆盖。由于我需要保留工件几天,因此我无法继续使用此解决方案。
有没有办法让不同的 vsts 代理共享同一个 C:\agent\work
目录?
我需要共享这个目录,这样每个代理都可以找到从另一个容器创建的文件,例如,如果代理 1 在 C:\agent\work
下创建文件,我希望代理 2 可以访问这些文件,以便执行发布。
如您所见,您目前采用的方法无法可靠地发挥作用。您将无法使其可靠地工作。
解决方法很简单:不要尝试共享此文件夹。让每个容器中的每个代理创建自己的工作文件夹。
跨作业共享构建输出的方式是publish
它们。不要发布到文件共享,而是发布到 Azure DevOps——文件共享发布主要是 TFS 2013 及更早版本保留的遗留功能,近十年来都没有必要。
有关详细信息,请参阅链接文档。
我为这个问题选择的解决方案是将工件存储在单独的目录中,例如每个容器上的 C:\artifacts
。构建过程将使用 builID
和 $(artifactsPath) -> C:\artifacts
然后容器的 C:\artifacts
目录将在所有容器之间共享,并在主机上映射:
docker run --name image1 -v S:\artifacts:C:\artifacts
发布工件:
task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(build.BuildId)'
publishLocation: 'FilePath'
TargetPath: '$(artifactsPath)$(Build.DefinitionName)\drop'