【问题标题】: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
【解决方案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。