从 Azure DevOps Pipeline 访问 SQL Server

Posted

技术标签:

【中文标题】从 Azure DevOps Pipeline 访问 SQL Server【英文标题】:Accessing SQL Server from Azure DevOps Pipeline 【发布时间】:2021-05-13 08:50:51 【问题描述】:

问题

我已经设置了一个 Azure 管道,我遇到的问题是在管道的测试程序集部分它失败了,因为它无法解析连接字符串/找到我的 SQL Server。

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception: The network path was not found

在这种情况下,我想避免创建模拟,最好让代码直接与 SQL Server 通信。

SQL Server 位于 Azure VM 上,因此它不是“Azure SQL 数据库”服务。

我的尝试

我已打开 Azure VM 上的端口以允许来自 Azure DevOps 使用的所有区域/IP 范围的流量(我在网上发现这是必需的)。我还尝试将管道“测试程序集”内的连接字符串指向一个不同的(本地)Windows 服务器,该服务器包含一个 SQL Server 实例,但它仍然无法找到/连接到 SQL。

从我的本地(Azure VM 和本地服务器)连接到 SQL 时,我可以连接。我们还有一些其他服务使用位于 Azure VM 上的 SQL Server,因此我确信连接问题与来自 Azure 管道的连接有关。

以前有人遇到过这个问题吗?

更新

我已将连接字符串更新为直接引用端口,即

**.***.**.***,1433

并且错误信息现在已更改为:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - The wait operation timed out.) ---> System.ComponentModel.Win32Exception: The wait operation timed out

【问题讨论】:

Named Pipes Provider 似乎是个问题。您是否尝试过强制 TCP/IP 连接?参考:Troubleshoot connecting to the SQL Server Database Engine 您能否确保您当前的管道可以连接到您的 SQL Server 计算机?您可以通过Windows machine file copy 之类的任务对其进行测试,以检查您的管道是否可以访问 SQL Server。 我添加了一个命令行脚本,并在开启 SQL Server 的情况下 ping Azure VM 的 IP 地址,但它超时。是否实现了与windows机器文件复制任务相同的信息? @Brummy,是的。我认为 Azure devops 仍然被您的 Azure VM 阻止。是不是刚把azure devops的IP加入白名单docs.microsoft.com/en-us/azure/devops/organizations/security/…,没有把托管代理所在机器的IP加入白名单?docs.microsoft.com/en-us/azure/devops/pipelines/agents/… 这个问题有什么更新吗?你解决了这个问题吗?如果没有,请告诉我有关此问题的最新信息吗? 【参考方案1】:

我现在可以正常工作了。

在将 Azure DevOps 区域从西欧更改为英国南部后,我的 DevOps 现在可以与我的 VM 上的 SQL Server 通信(根据 Leo Liu-MSFT 的评论,所需的 IP 地址被列入白名单)。

【讨论】:

以上是关于从 Azure DevOps Pipeline 访问 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

azure devops 中的 Pipeline 和 Release Pipeline 有啥区别?

markdown 20190601-分享DevOps以及Azure DevOps的Pipeline功能做到CI以及CD

在 Azure DevOps Pipeline 模板中使用变量

在 azure 后端存储中使用状态文件将 terraform 的输出传递到 Azure Devops Pipeline

Azure DevOps Pipeline 更改服务结构应用程序的证书权限

Azure Devops Pipeline YAML 中的 Git 标记名称