【问题标题】:Configuration management in builds without source controlled config transformations没有源控制配置转换的构建中的配置管理
【发布时间】:2016-12-12 14:39:11
【问题描述】:

给定 appsettings.json 文件(ASP.NET Core 应用程序)中名为“Data:ConnectionString”的配置,如何在构建中覆盖它?通过覆盖它可以是有一个步骤在构建期间编译之前更改 appsettings.json 中的值,或者我在使用“dotnet test”时覆盖了参数,或其他。

更多信息:

我在 appsettings.json 中有一个标准配置的 ASP.NET Core 应用程序。我不希望在源代码管理中检查任何连接字符串或敏感数据。

我正在使用 Visual Studio Team Service(云 TFS)构建我的应用程序。有一个执行测试的步骤,我希望这些测试针对我不想签入凭据的远程服务运行。

【问题讨论】:

    标签: json tfs asp.net-core azure-devops .net-core


    【解决方案1】:

    http://marketplace.visualstudio.com 上提供了许多扩展程序,它们可以帮助您,而且不会有任何复杂性。

    https://marketplace.visualstudio.com/items?itemName=YodLabs.VariableTasks

    我喜欢随附的可变任务包:

    • 设置变量 设置变量值并可选择对其应用转换。
    • 使用凭据设置变量从现有服务端点设置用户名/密码
    • 从 JSON 中设置变量 使用 JSONPath 从 JSON 中提取值
    • 从 XML 中设置变量 使用 XPath 从 XML 中提取值
    • 更新内部版本号 允许您更改内部版本号 Increment Version 增加一个 semver 版本号

    超级简单...您也可以只搜索“json”或“变量”来查找其他选项...

    【讨论】:

    【解决方案2】:

    最流行的方式:

    • 使用app secrets
    • 在 project.json 中使用 scripts 部分。您有 4 个事件 - 预编译、后编译、预发布、发布后

    【讨论】:

    • 我的问题不是覆盖本地开发机器。我的问题是作为构建过程的一部分运行时。在这种情况下,我看不出这些选项中的任何一个有什么帮助。如何在团队服务中管理应用机密?
    【解决方案3】:

    您可以将构建中的环境变量 ASPNETCORE_ENVIRONMENT 设置为“测试”之类的内容。创建一个名为 appsettings.Test.Json 的 appsettings.json 文件。然后,当您在 Startup.cs 中设置配置时,请执行类似...

              var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    

    当环境变量设置为 TEST 时,您的新 appsettings 文件将被加载,并且可以将连接字符串设置为您想要的任何内容。

    【讨论】:

    • 但这是一种正常的方法,您可以签入该 appsettings 文件,我要求一种不签入“秘密”的方法,而是在构建中覆盖它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2011-06-21
    • 2012-09-09
    相关资源
    最近更新 更多