覆盖 YAML 管道任务中的 DotNet Core 测试 运行 参数

Overriding DotNet Core test run parameters from a YAML pipeline task

我有几个使用连接字符串的集成测试。测试来自 azure devops 管道 运行,具有 yaml 定义(DotNetCoreCLI@2 任务)

这个 connstrings 曾经在 .运行settings 文件中设置,但我宁愿它们是秘密的,所以我将 conn 字符串移动到管道库,并标记为秘密。

与此同时,我已经从 运行 设置文件中删除了秘密,将参数值保留为空字符串。

所以现在,我只需要在 运行ning dotnet 测试时覆盖测试 运行 参数值...

通过阅读 Microsoft here 的文档,我已验证我可以在 Powershell 中完成此操作

dotnet test path\to\mytest.dll --logger trx --settings path\to\my.runsettings --% -- TestRunParameters.Parameter(name=\"Customer1.TestConnStr\", value=\"Id=xxx;Pass=yyy\") TestRunParameters.Parameter(name=\"Customer2.TestConnStr\", value=\"Id=xxx;Pass=yyy\")

我还看到从 cmd 运行ning 时未使用 --%,我认为这更适合我的 yaml 管道(运行ning on a windows代理人)。 但是,我仍然无法在我的 yaml 任务中表达上述内容。我做了很多猜测,这里有一个例子:

  - ${{ each project in parameters.projects }}:
    - task: DotNetCoreCLI@2
      displayName: Execute ${{ project }} integration tests
      condition: succeededOrFailed()
      inputs:
        command: 'test'
        projects: '$(Pipeline.Workspace)/IntegrationTests/*/*${{ project }}.Test.dll'        
        arguments: '--settings ${{ parameters.testRunSettingsFile }} -- TestRunParameters.Parameter(name=\"Customer1.TestConnStr\", value=\"${{ parameters.testConnStr }}\" TestRunParameters.Parameter(name=\"Customer2.TestConnStr\", value=\"${{ parameters.testConnStr }}\")'
        testRunTitle: ${{ parameters.testRunTitlePrefix }}${{ project }}

在这种情况下,包裹参数覆盖名称和值的引号不会出现在生成的命令中。给我一个错误:

The test run parameter argument is invalid. Please use the format below. Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\")

如下所示替换正确的 yaml 转义单引号会给我同样的错误:

-- TestRunParameters.Parameter(name=''Customer1.TestConnStr'', value=''${{ parameters.testConnStr }}''

所以我想我已经接近解决方案了,它可能只是我的角色逃脱了一些东西,但我就是找不到如何逃脱或逃脱什么。

经过反复试验,我自己最终解决了这个问题,只是正确地转义了反斜杠双引号。 "\"" 所以我的 YAML 中有以下行:

arguments: '--settings ${{ parameters.testRunSettingsFile }} -- TestRunParameters.Parameter(name="\""Customer1.TestConnStr"\"", value="\""${{ parameters.testConnStr }}"\"" TestRunParameters.Parameter(name="\""Customer2.TestConnStr"\"", value="\""${{ parameters.testConnStr }}"\"")'