1

所以....

我想知道是否有人能够帮助我解决这个问题?

基本上,我创建了一个自托管的 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

容器启动并运行后,我可以通过运行以下命令来确认目录是否可用dir <server>\\<share>- 此外,我必须确保新创建的 gMSA 帐户具有共享权限。

所以我继续将容器加入到我们的 DevOps 服务器的代理池中,然后我运行了一个测试构建。正如预期的那样,我能够从我们的本地加入域的服务器中提取/发布人工制品。

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

4

1 回答 1

1

Build.ArtifactStagingDirectory正如丹尼尔在评论中提到的那样,您可以使用将构建工件发布到服务器。

Build.ArtifactStagingDirectory

代理上的本地路径,任何工件在被推送到其目的地之前被复制到该路径。例如:c:\agent_work\1\a

使用此文件夹的典型方法是使用 Copy files 和 Publish build artifacts 任务发布您的构建工件。

您可以参考 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 提交到您的 repo,并在任务中设置 Dockerfile 路径以匹配其位置

像这样设置 Dockerfile(我在这里假设 .NET Core 2.2): FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "myAppNameHere.dll"]因为您已将 Docker Build Context 设置为 $(Build.ArtifactStagingDirectory),您的应用程序已在其中发布,COPY 命令将使用它作为“当前工作目录。” COPY 的翻译是“将 $(Build.ArtifactStagingDirectory) 中的所有内容复制到容器内的 /app 文件夹中”。

这将为您提供一个基本的 Docker 容器,其中仅包含您预先构建和发布的应用程序文件。

此外,您还可以选择将这些工件作为 Nuget 包发布。为此,您可以参考此博客:在 Pipelines 构建中从 docker 容器访问 Azure Artifacts。

于 2020-02-19T06:47:58.567 回答