2

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

我正在使用秘密管理器在开发模式下存储我的 API 令牌和其他敏感数据

秘密.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 中执行时如何加载设置?

4

1 回答 1

2

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

- run: program.exe

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

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

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

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

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

另一种选择是将加密的secrets.json保存在存储库中,并在工作流运行时对其进行解密;有关详细信息,请参阅文档

于 2020-06-06T00:34:10.277 回答