无法添加Azure数据库防火墙规则以允许构建服务器运行测试

时间:2016-12-15 13:37:37

标签: azure continuous-integration azure-sql-database azure-devops azure-powershell

我们使用Visual Studio Online托管的构建服务器来自动化构建过程。作为其中的一部分,我正在考虑将单元和集成测试添加到此过程中。

这些测试需要访问我们的SQL Azure数据库(其中两个在同一台服务器上),而这又需要通过数据库服务器的防火墙进行访问。

我有一个PowerShell脚本,它使用New-AzureRmSqlServerFirewallRule向数据库服务器添加IP地址,这些防火墙规则已成功显示在Azure门户中。

具体来说,该脚本为:

添加了防火墙规则
  • 构建服务器上的所有IPv4地址*(由Get-NetIPAddress返回)
  • 构建服务器的外部IP地址(由https://api.ipify.org返回)

结合使用时,似乎会自动添加预定义的 AllowAllAzureIPs AllowAllWindowsAzureIps 规则。

但是,测试随后失败,例外情况为:

  

System.Data.SqlClient.SqlException:   System.Data.SqlClient.SqlException:与网络相关或   建立连接时发生特定于实例的错误   SQL Server。服务器未找到或无法访问。校验   实例名称正确且SQL Server配置为   允许远程连接。 (提供者:命名管道提供商,错误:40 -   无法打开与SQL Server的连接)

我不确定为什么构建服务器无法访问数据库服务器 - 可能是测试进程的主机使用的是不同的IP地址吗?

更新
正如已经指出的那样,异常消息提到"命名管道提供商"这表明数据库连接使用的是命名管道而不是IP / TCP连接。为了测试这一点,我更改了本地app.config以包含一个未知/随机/不可访问的IP并在本地运行测试(否则它们在本地成功运行):我收到完全相同的异常消息提及"命名管道提供商" 。也许在某种程度上ReliableSqlConnection类解析为命名管道,但我的观点是,我可以通过在我的数据库连接字符串中更改为未知或无法访问的IP地址来引发同样的异常。

此外,数据库连接字符串以tcp:开头,Test-Connection "172.217.18.100" #resolves to www.google.com 根据this blog post明确告知连接使用TCP / IP和命名管道。

我还修改了防火墙规则以允许所有IP地址(0.0.0.0到255.255.255.255)但仍然抛出相同的异常。这表明SQL Azure防火墙规则不是“阻塞”的原因。

因此我的怀疑转向网络访问被阻止(尽管可能存在白名单以允许构建服务器到达代码存储库)。我在构建过程的开始添加了一个非常简单的PowerShell脚本:

New-AzureRmSqlServerFirewallRule

这导致

  

测试与计算机的连接' 172.217.18.100'失败:由于缺乏资源而导致错误

是否禁用了构建服务器ping / ICMP或是否阻止了所有传出流量?

*该脚本仅考虑IPv4地址,因为我在将IPv6地址传递给{{1}}方面没有取得任何成功。

3 个答案:

答案 0 :(得分:1)

我们终于解决了这个问题。这个问题与防火墙无关。问题是我们的单元测试中的app.config文件没有经过我们的web.config文件所做的转换步骤。因此,所有设置都来自我们的本地开发,因此是错误的。

更多相关信息:
Connect to external services inside Visual Studio Online build/test task

答案 1 :(得分:0)

您使用的是什么连接字符串?您的错误似乎表明这不是真正的防火墙问题,而是正在尝试连接到不存在的服务器。

Firewall error example

我的*错误*假设现在是你的连接字符串只包含服务器名称,没有.database.windows.net后缀,导致客户端驱动程序在本地网络上查找服务器。提供的错误似乎与防火墙无关。

(编辑以反映作者的反馈。)

答案 2 :(得分:0)

如果您通过TCP进行连接,那么为什么您的错误消息显示 Named Pipes

  

[...]

     

(提供商:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)

我首先要研究这个悖论。

防火墙测试非常简单,允许0.0.0.0255.255.255.2550.0.0.0/0并重新测试。我的钱也出现了同样的错误信息。

相关问题