【问题标题】:Azure DevOps "Hosted 2017" build agent not allowing SQL connectionAzure DevOps“Hosted 2017”构建代理不允许 SQL 连接
【发布时间】:2019-03-23 20:33:56
【问题描述】:

我有一个非常简单的 DacPac,它由 Azure DevOps 构建并由发布管道发布。构建工作正常,但管道因连接错误而失败。我已经检查并重新检查了设置。防火墙规则在目标服务器上正确设置,凭据有效,但发布不会通过。我尝试了很多组合,包括指定端口,但我无法连接。如果我尝试从 PowerShell 和 Invoke-SqlCmd 发起连接,我会收到类似的连接错误。

谁能解释一下?

Hosted 2017 代理是否有任何端口限制(例如 1433 被阻止)?

我需要更新代理吗?

SQL 连接是否需要一些额外的配置?

谢谢

我得到的错误是:

无法连接到目标服务器“.database.windows.net”。 请验证服务器名称等连接信息, 登录凭据和目标服务器的防火墙规则。登录 用户数据失败...

【问题讨论】:

标签: azure-devops azure-sql-database azure-pipelines-release-pipeline invoke-sqlcmd azure-devops-hosted-agent


【解决方案1】:

我在同样的问题上苦苦挣扎。我确实通过执行以下两个步骤来解决它

  1. 更改了与不同服务器的数据库连接 成功我将它恢复到当前服务器。
  2. 将数据库兼容级别更改为 150 以下。
  3. 创建新版本

以下参考资料帮助了我。希望这会有所帮助。

https://geeklearning.io/dacpac-and-azure-sql-updates/

https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/SqlAzureDacpacDeploymentV1/README.md#troubleshooting-i

【讨论】:

    【解决方案2】:

    为我的 Azure SQL 数据库允许所有 IP 范围为我做到了。 现在我只需要弄清楚并缩小我的构建代理在我的 Azure DevOps 构建管道中运行的 IP。

    在 Azure DevOps 构建任务中自动设置防火墙规则不起作用。

    【讨论】:

      【解决方案3】:

      我以前也遇到过同样的问题,解决此问题的“最简单”方法是将 DevOps 拥有的每个 IP 地址列入白名单 - 遗憾的是,根据您的地理位置,该列表相当大,而且每周都会更改.

      我确实编写了一个 PS1 脚本来解析列表并确保必要的规则到位。

      https://www.microsoft.com/en-nz/download/details.aspx?id=41653

      然而,这样做有一些明显的(和较少的)问题......

      某些区域的 IP 地址列表非常庞大,以至于 Azure 数据库无法拥有它们,超出了限制。

      在开放 IP 地址时,您(至少在理论上)将攻击向量暴露给您的数据库。如果有人知道您的服务器地址,他们可能会尝试访问它。

      因此我尝试了 0.0.0.0/allow access to Azure 设置 - 但这似乎不适用于 DevOps。

      我的最终解决方案是在 Azure 中启动 VM 并在其上安装构建代理。不理想,但确实有效。

      【讨论】:

        【解决方案4】:

        标准 SQL 发布活动似乎不支持 AD Auth。 UI 仅允许您为 SQL 用户提供凭据。有一个选项可以通过/TargetConnectionString 参数为SqlPackage.exe 提供连接字符串,但是这不起作用,因为UI 需要SQL 凭据,并且这些不能与/TargetConnectionString 参数一起使用。

        我通过从标准 PowerShell 发布脚本运行 SqlPackage.exe 解决了这个问题。

        & "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\SqlPackage.exe" /SourceFile:"$(System.DefaultWorkingDirectory)/_MyProj.Infrastructure 构建/DBScripts/bin/Debug/MyProj.Database.dacpac" /Action:Publish /tcs:"服务器=myprodsql.database.windows.net;初始 目录=OptimizedDb;持久安全信息=False;用户 ID='$(adminUserEmail)';Password='$(adminUserPassword)';MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory 密码"

        【讨论】:

        【解决方案5】:

        您需要指定端口:xxx.database.windows.net,1433

        【讨论】:

        • 我在问题中提到我尝试指定端口。
        猜你喜欢
        • 2021-01-03
        • 2020-07-04
        • 2021-11-18
        • 2020-11-08
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-17
        相关资源
        最近更新 更多