You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps发布管道部署带私有终结点的Azure SQL失败求助

问题分析与解决方案

核心问题原因

你遇到的No such host is known错误,根源在于Azure SQL Server配置了私有终结点后,其公网DNS域名(xxxx.database.windows.net)不会解析到公网IP,而是被Azure私有DNS重定向到私有终结点的私网IP。此时你的VMSS代理池即使把公网IP加入SQL防火墙,也无法通过公网访问SQL Server——因为公网根本找不到这个主机地址。

分步解决方案

1. 确保代理与SQL私有终结点的网络连通

  • 确认你的VMSS代理池所在的虚拟网络(VNet),与Azure SQL私有终结点所在的VNet处于同一网络环境:
    • 要么直接在同一个VNet
    • 要么通过VNet对等互联、VPN网关或ExpressRoute实现VNet间连通
  • 只有代理能通过私网访问到SQL的私有终结点,才能建立连接。

2. 移除无效的公网IP防火墙配置

你的DACPAC任务中配置的IpDetectionMethod、StartIpAddress、EndIpAddress都是针对公网访问SQL Server的场景,在私有终结点环境下完全无用,直接移除这些配置项:

steps:
- task: SqlAzureDacpacDeployment@1
  displayName: 'Azure SQL DacpacTask'
  inputs:
    azureSubscription: 'zzzzz'
    AuthenticationType: aadAuthenticationPassword
    ServerName: '$(ServerName)'
    DatabaseName: '$(DatabaseName)'
    aadSqlUsername: '$(UserName)'
    aadSqlPassword: '$(Password)'
    DacpacFile: '$(System.DefaultWorkingDirectory)/xxxx/drop_db/DB.dacpac'
    AdditionalArguments: '/p:IgnoreAnsiNulls=True /p:IgnoreComments=False /p:BlockOnPossibleDataLoss=True /p:GenerateSmartDefaults=True /p:DropObjectsNotInSource=False /p:UnmodifiableObjectWarnings=False /p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions'
    # 移除以下无效的公网防火墙配置
    # IpDetectionMethod: IPAddressRange
    # StartIpAddress: '$(AgentIP)'
    # EndIpAddress: '$(AgentIP)'

3. 删除无用的公网IP获取任务

既然不需要代理的公网IP了,直接删除那个获取AgentIP的AzurePowerShell任务,以及对应的AgentIP变量:

# 移除以下无效任务
# steps:
# - task: AzurePowerShell@5
#   displayName: 'Azure PowerShell : Get Agent Public IP'
#   inputs:
#     azureSubscription: 'zzzzzz'
#     ScriptType: InlineScript
#     Inline: |
#      $ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
#      Write-Host $ip
#      Write-Host "##vso[task.setvariable variable=AgentIP;]$ip"
#     azurePowerShellVersion: LatestVersion

variables:
  ServerName: 'xxxx.database.windows.net'
  DatabaseName: 'yyyy'
  UserName: 'xyz@abc.com'
  # 移除无效变量
  # AgentIP: ''

4. 验证DNS解析正确性

  • 确保VMSS所在VNet关联了Azure私有DNS区域privatelink.database.windows.net:
    • 这个私有DNS区域会把xxxx.database.windows.net解析到SQL私有终结点的私网IP
    • 如果没有关联,VMSS代理可能无法正确解析SQL服务器地址,依然会报找不到主机的错误

5. 确认SQL防火墙的必要配置

  • 保留“允许Azure服务和资源访问此服务器”选项即可,这个配置在私有终结点场景下,允许Azure内部资源(如你的VMSS代理)通过私网访问SQL Server
  • 不需要添加任何公网IP的防火墙规则,因为私有终结点已经阻断了公网访问路径

最终有效任务配置示例

variables:
  ServerName: 'xxxx.database.windows.net'
  DatabaseName: 'yyyy'
  UserName: 'xyz@abc.com'

steps:
- task: SqlAzureDacpacDeployment@1
  displayName: 'Azure SQL DacpacTask'
  inputs:
    azureSubscription: 'zzzzz'
    AuthenticationType: aadAuthenticationPassword
    ServerName: '$(ServerName)'
    DatabaseName: '$(DatabaseName)'
    aadSqlUsername: '$(UserName)'
    aadSqlPassword: '$(Password)'
    DacpacFile: '$(System.DefaultWorkingDirectory)/xxxx/drop_db/DB.dacpac'
    AdditionalArguments: '/p:IgnoreAnsiNulls=True /p:IgnoreComments=False /p:BlockOnPossibleDataLoss=True /p:GenerateSmartDefaults=True /p:DropObjectsNotInSource=False /p:UnmodifiableObjectWarnings=False /p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions'

内容的提问来源于stack exchange,提问作者Ajay Meda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:54:52