从Docker容器访问Windows文件共享(域)中的伪像

时间:2020-02-18 15:04:05

标签: windows docker azure-devops containers azure-devops-self-hosted-agent

所以...

我想知道是否有人可以帮助我?

基本上,我已经创建了一个自托管的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服务器的代理池,然后运行了一个测试版本。如预期的那样,我能够从本地加入域的服务器中提取/发布人工制品。

再次,感谢大家在这个问题上为我提供帮助。

1 个答案:

答案 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

  1. 在发布后添加一个Docker任务,配置为“构建”
  2. 将任务中的“构建上下文”设置为$(Build.ArtifactStagingDirectory)。那就是Docker的根路径 用于Dockerfile中的COPY之类的命令。
  3. 将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.