在多个容器之间共享代理工作目录(C:\agent\work)



我的设置由一个windows服务器组成,在该服务器上部署了一些容器。每个容器都是一个生成vsts代理,可以执行生成和部署。我试图弄清楚是否可以在多个容器之间共享目录C:agentwork,以便拥有一个集中的工件目录。

为了共享C:agent:work,我可以使用特定的路径并创建每个容器,其中卷映射到此目录,例如

Container1: docker run agent1 -v C:artifacts:C:agentwork
Container2: docker run agent2 -v C:artifacts:C:agentwork

然而,使用此解决方案,我进行了测试,并能够确定每个容器将在各自的SourceRootMapping文件夹中保留内部版本号,并且每当两个容器具有相同的工作目录时,这将被覆盖。由于我需要保留工件几天,我无法继续使用此解决方案。

有没有办法让不同的vsts代理共享同一个C:agentwork目录?

我需要共享这个目录,这样每个代理都可以找到从另一个容器创建的文件——例如,如果Agent1在C:agentwork5下创建文件,我希望这些文件可以从Agent2访问,以便执行发布。

正如您所看到的,您目前采用的方法不会可靠地工作。你将无法使它可靠地工作。

解决方案很简单:不要尝试共享此文件夹。让每个容器中的每个代理都创建自己的工作文件夹。

跨作业共享构建输出的方式是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'

最新更新