所以...
我想知道是否有人可以帮助我?
基本上,我已经创建了一个自托管的Docker容器,用作构建代理(Azure DevOps)
现在我已经开始测试代理,并且由于我们的放置文件夹位于Windows文件共享(已加入域)上,因此我无法将人工制品发布到目的地时遇到问题
有人能阐明我如何能够访问此文件共享以从构建中删除工件,并能够在发布阶段下载它们吗?
我们使用本地TFS Azure DevOps,而不是Azure DevOps Services:(
TIA,
最后,我能够解决此问题。
我要解决的问题是,我在域控制器上创建了一个gMSA帐户,然后在托管Docker容器的计算机上创建了credspec文件,然后最终我使用以下命令docker run --security-opt "credentialspec=file://<credspecfilename>.json" --hostname <hostname> -it <Image-name> PowerShell
运行了该容器< / p>
一旦容器启动并运行,我就可以通过运行以下命令dir <server>\\<share>
来确认目录是否可用-另外,我还必须确保新创建的gMSA帐户具有共享权限。 / p>
因此,我继续将容器加入我们的DevOps服务器的代理池,然后运行了一个测试版本。如预期的那样,我能够从本地加入域的服务器中提取/发布人工制品。
再次,感谢大家在这个问题上为我提供帮助。
答案 0 :(得分:1)
您可以使用Build.ArtifactStagingDirectory
,就像注释中提到的 Daniel 一样,将构建工件发布到服务器。
Build.ArtifactStagingDirectory
之前将任何工件复制到的代理上的本地路径 被推到目的地。例如:
c:\agent_work\1\a
使用此文件夹的典型方法是发布构建工件 复制文件和发布构建工件任务。
详细步骤,您可以参考托马斯·亚伯拉罕(Thomas F. Abraham)在此问题中的答复:How to copy azure pipeline artifacts to a docker image which is microsoft dotnetcore runtime image
- 在发布后添加一个Docker任务,配置为“构建”
- 将任务中的“构建上下文”设置为$(Build.ArtifactStagingDirectory)。那就是Docker的根路径 用于Dockerfile中的COPY之类的命令。
- 将Dockerfile提交给您的仓库,并在任务中设置Dockerfile路径以匹配其位置
像这样设置Dockerfile(我在这里假设.NET Core 2.2):
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "myAppNameHere.dll"]
因为您已经设置了 Docker构建上下文到$(Build.ArtifactStagingDirectory),其中 应用已发布,COPY命令会将其用作“当前 工作目录。” COPY的翻译是“将所有内容复制到 $(Build.ArtifactStagingDirectory)到/ app文件夹内 容器。”这将为您提供一个基本的Docker容器,其中仅包含您的 预先构建和发布的应用文件。
此外,您还可以选择将这些工件发布为Nuget包。这样,您可以参考以下博客:Accessing Azure Artifacts from a docker container in a Pipelines build.