【问题标题】:Configuring nuget for visual-studio-generated docker build为视觉工作室生成的 docker build 配置 nuget
【发布时间】:2021-12-12 16:41:20
【问题描述】:

Visual Studio 现在 generates Dockerfile 用于 dotnet 项目,我们正在使用它(稍作调整)进行持续集成。

但是,Dockerfile 没有任何配置 nuget 的规定。它甚至只在运行 dotnet restore 之前从上下文中复制 .csproj 文件,以避免在开发过程中重新运行该步骤。

但是我们的项目需要来自内部受密码保护的存储库的一些模块,所以我需要为内部的dotnet restore 命令提供包源和凭据。

当前注入(特定于环境的)nuget 配置的最佳做法是什么?

【问题讨论】:

    标签: .net-core dockerfile nuget


    【解决方案1】:

    这在此处记录:https://github.com/dotnet/dotnet-docker/blob/main/documentation/scenarios/nuget-credentials.md。

    总而言之,有多种方法可以做到这一点:

    • 使用多阶段构建来保护包含硬编码凭据的 nuget.config。仅当您确保凭据不受源代码控制且 nuget.config 文件是临时文件时才推荐使用。
    • 传递secrets by file with BuildKit。这与上一个选项类似,但使用 Dockerfile 机密来提供对 nuget.config 文件的访问。
    • 在 nuget.config 中使用环境变量。在这种情况下,nuget.config 文件将为其凭据值引用环境变量。然后,构建机器将在执行docker build 时设置环境变量。
    • 使用Azure Artifact Credential Provider。仅当您将 Azure Artifacts 用于您的包源时,这才有可能。

    无论您选择哪个选项,请确保凭据永远不会存储在已发布的映像层中。

    【讨论】:

    • visual-studio 生成的 dockerfile 始终是多阶段的,因此应注意从最终图像中排除凭据。但目前尚不清楚哪些选项实际上可以在 Visual Studio 容器工具中使用(也就是说,我怀疑 buildkit 的秘密(还没有))。
    • 对于 VS,您可以让它处理您对提要的身份验证。在从 VS 运行和从命令行构建 Dockerfile 之间分别处理身份验证。 VS 实际上并没有在你的 Dockerfile 中构建所有阶段。它实际上是在本地构建项目,然后将输出批量安装到容器中。 (您可以通过从 Dockerfile 中删除除基本阶段之外的所有阶段来证明这一点,它仍然可以在 VS 中工作。)所以只要 VS 可以对您的提要进行身份验证,您就应该很好。
    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多