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 强大灵活的配置能力。

posted @   dudu  阅读(1390)  评论(0编辑  收藏  举报
编辑推荐:
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
阅读排行:
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?
历史上的今天:
2017-08-05 asp.net core 1.1 项目升级至 asp.net core 2.0 preview 2 与正式版
2015-08-05 通过git rebase修改commit message
2010-08-05 推荐阅读20100805
2010-08-05 博客园已经用上NorthScale Memcached Server
2007-08-05 服务器带宽已升级至40M独享
2004-08-05 共同建设我们的网上家园—博客园新开通“家园建设”区
点击右上角即可分享
微信分享提示