【问题标题】:How to configure .net core 3.1 appsettings to run tests on Github actions如何配置 .net core 3.1 appsettings 以在 Github 操作上运行测试
【发布时间】:2020-09-24 23:47:07
【问题描述】:

我正在使用 .Net core 3.1 开发一个 Web API,试图将其集成到 Github Actions 以在创建拉取请求时运行集成测试。

我正在使用secrets manager 在开发模式下存储我的 API 令牌和其他敏感数据

secrets.json

{
    "Firebase": {
        "Login": "foo@bar.com",
        "Password": "FooBar",
        "Url": "foobar.firebaseapp.com "
    },

}

在 GitHub 上,我尝试添加 Secrets(GitHub secrets = environment variables),其名称与我在我的秘密 JSON 中的名称相同,但没有奏效。 我创建的 GitHub 机密就像

(KEY - VALUE)
LOGIN - foo@bar.com 
PASSWORD - FooBar

在我的测试类中,我在测试前使用以下配置调用环境变量

public MyTestClass()
{           
    var builder = new ConfigurationBuilder() 
        .AddUserSecrets<MyTestClass>()
        .AddEnvironmentVariables();

    Configuration = builder.Build();
    _settings = Configuration.Get<Settings>();
}

我的 .yml 看起来像

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.300
    - name: Nuget
      run: dotnet restore
    - name: Build
      run: dotnet build --configuration Release --no-restore
    - name: Test
      run: dotnet test --no-restore --verbosity normal
      env: 
        LOGIN: ${{ secrets.LOGIN }}
        PASSWORD: ${{ secrets.PASSWORD}}
        URL: ${{ secrets.URL}}            

在 GitHub Actions 中执行时如何加载设置?

【问题讨论】:

    标签: .net-core integration-testing github-actions


    【解决方案1】:

    不确定我是否没有说明明显的(您没有提到如何启动测试应用程序),而是 GitHub 的秘密 != 环境变量。如果用户想要,它们可以,但它不是自动完成的。

    - run: program.exe
    

    在这种情况下,程序将不知道登录名/密码,因为它无法访问这些数据。

    - run: program.exe
      env:
       LOGIN:    ${{ secrets.LOGIN }}
       PASSWORD: ${{ secrets.PASSWORD }}
    

    在这种情况下,程序将知道登录名/密码,因为机密被“转换”为环境变量,应用程序可以看到。

    - run: program.exe --login=${{ secrets.LOGIN }} --password=${{ secrets.PASSWORD }}
    

    在这种情况下,程序将知道登录名/密码,因为秘密是通过命令行参数传递的,应用程序可以看到。在这种情况下,环境变量保持不变。

    另一种选择是将加密的 secrets.json 保存在存储库中,并在工作流运行时对其进行解密;详情请见docs

    【讨论】:

    • 他@Samira,感谢您的见解,我已经用我当前的 .yml 更新了我的问题。我想知道我是否在 c# 端的测试设置中遗漏了一些东西,或者我是否必须以与我的 json 配置匹配的方式设置环境变量
    • 所以解决方案最终与我创建环境变量的方式有关。我必须使它们与我的设置类结构相匹配。在这种情况下 Settings.Firebase.Login 有环境变量 = FIREBASE__LOGIN
    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2021-03-02
    • 2021-05-29
    • 2020-08-20
    • 2020-10-03
    相关资源
    最近更新 更多