zoukankan      html  css  js  c++  java
  • ASP.NET Core 从 gitlab-ci 环境变量读取配置

    最近在加强持续集成,遇到一个场景需要通过 gitlab-ci 环境变量(Settings -> Settings -> CI/CD -> Variables )在持续集成时向 ASP.NET Core 应用传递配置。

    在 appsettings.json 中的配置是这样的

    {
      "ossClient": {
        "accessKeyId": "",
        "accessKeySecret": ""
      }
    }

    摆在面前的问题是如何通过环境变量传递上面的配置,并且不需要修改读取配置的代码?

    services.Configure<OssCredential>(configuration.GetSection("ossClient"));

    ASP.NET Core 默认就启用了从环境变量读取配置,在 WebHost.CreateDefaultBuilder() 中包含了 config.AddEnvironmentVariables() ,只要用正确的格式传递配置,就能搞定。

    那问题就剩下一个 —— 在环境变量中以什么样的格式提供 ossClient 的 accessKeyId 与 accessKeySecret 配置?

    在网上找到了一篇解惑的博文 Read Connections Strings & Config Values from Environment Variables

    export ConnectionStrings__default="Server=database-server; Database=Sample; Trusted_Connection=True;"

    原来只需用2个下划线分隔 sectionName 与 key 。

    查看 Microsoft.Extensions.Configuration.EnvironmentVariables 中 EnvironmentVariablesConfigurationProvider 实现源码也确认了这一点。

    private static string NormalizeKey(string key)
    {
        return key.Replace("__", ConfigurationPath.KeyDelimiter);
    }

    使用下面的环境变量配置在实际项目中进行验证,确实有效。

    export ossClient__accessKeyId=XXX
    export ossClient__accessKeySecret=YYY

    在 gitlab-ci 中也验证成功。

    从中实际体验了 ASP.NET Core 强大灵活的配置能力。

  • 相关阅读:
    用户场景描述
    个人工作总结(第一阶段)
    个人进度报告
    《构建之法》阅读笔记05
    《构建之法》阅读笔记04
    《构建之法》阅读笔记03
    2020寒假学习(14)
    2020寒假学习(13)
    2020寒假学习(12)
    2020寒假学习(11)
  • 原文地址:https://www.cnblogs.com/dudu/p/9420194.html
Copyright © 2011-2022 走看看