如何在 Azure Devops yaml 构建管道中 运行 时指定 SSDT 单元测试的连接详细信息

How to specify connection details for SSDT unit tests when run in Azure Devops yaml build pipeline

我正在为我的数据库项目使用 SSDT 单元测试。他们 运行 从 Visual Studio 没问题。

当我在 Azure DevOps 上 运行 我的构建管道时,我希望这些测试 运行 但当它无法连接时。我收到以下错误:

System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: 110003;Invalid user or password.

我测试的yaml如下:

- task: VSTest@2
  inputs:
        testSelector: 'testAssemblies'
        testAssemblyVer2: |
          **\*test*.dll
          !**\*TestAdapter.dll
          !**\obj\**
        searchFolder: '$(System.DefaultWorkingDirectory)'

app.config 文件中是否需要特别添加任何内容才能使其正常工作?注意:我正在使用 SQL 身份验证。

如果 SSDT 单元测试连接到本地计算机上的数据库服务器,azure devops 管道将失败,因为托管代理无法与本地计算机通信。

在这种情况下,您应该 create a self-hosted agent 在本地机器上,运行 通过在 yaml 管道中将池定义为本地代理池,在自托管代理上 运行 管道。

如果您使用其他云数据库服务器,如 azure sql 服务器。您可以检查 App.config 中的 connectionString 是否正确,并提供正确的 User IDPassword。 app.config 文件中的 connectionString 如下例

如果您想避免在 app.config 中的连接字符串中存储敏感信息。您可以将 connectionString 存储在管道中的 secret variable 中。

并在 app.config 中使用标记 connectionString="#{sqlDbTestConnectionString}#" 代替真实的连接字符串。

然后在管道中的 VsTest 任务之前添加 replace token task,以将 app.config 中的标记 #{sqlDbTestConnectionString}# 替换为秘密变量中定义的真实连接字符串。

您可以查看 this blog 了解更多信息。