Azure DevOps“ 2017年托管”生成代理不允许SQL连接

时间:2018-10-18 23:53:44

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

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

谁能阐明一些想法?

在Hosted 2017代理上是否有任何端口限制可能会成为障碍(例如1433被阻止)?

我需要更新代理吗?

SQL连接是否需要一些其他配置?

谢谢

我得到的错误是:

  

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

enter image description here enter image description here enter image description here

5 个答案:

答案 0 :(得分:2)

似乎标准的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   build / DBScripts / bin / Debug / MyProj.Database.dacpac“ /操作:发布   / tcs:“服务器= myprodsql.database.windows.net;初始   Catalog = OptimizedDb;持久性安全信息= False;用户   ID ='$(adminUserEmail)'; Password ='$(adminUserPassword)'; MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False; Authentication = Active Directory Password“

enter image description here

答案 1 :(得分:0)

我以前也遇到过同样的问题,解决此问题的“最简单”方法是将DevOps拥有的每个IP地址都列入白名单-遗憾的是,尽管列表很大,具体取决于您的地理位置,并且每周都会更改

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

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

但是这样做有几个明显的问题(少一个)...

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

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

因此,我确实尝试了对Azure设置的0.0.0.0/allow访问权限-但这似乎不适用于DevOps。

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

答案 2 :(得分:0)

允许我的Azure SQL数据库的所有IP范围都对我有用。 现在,我只需要找出并缩小构建代理在Azure DevOps构建管道中运行的IP。

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

答案 3 :(得分:0)

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

  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

答案 4 :(得分:-1)

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