我们正在使用托管的 VSTS PAAS 解决方案来管理我们的源、任务,并且正在合并托管的构建代理。我们能够成功地将我们的应用服务发布到 Azure Gov,但是在尝试完成我们的构建管道中的两个任务时遇到了问题,并且怀疑两者都是相关的。
我们使用数据库项目来构建 dacpac,并使用执行 Azure SQL 构建任务将架构更改发布到我们的数据库。以 Azure Gov 为目标时,我们无法连接到服务器并显示以下消息:
无法连接到主服务器或目标服务器“{servername}”。您必须在主服务器或目标服务器“{servername}”中有一个密码相同的用户。
我已确认我的 SQL DB 详细信息设置正确。我还尝试将防火墙规则设置为 AutoDetect 和 IP 范围(0.0.0.0 - 255.255.255.255),但仍然看到相同的错误。我仍然怀疑 VS 构建代理无法为 azure gov 租户设置防火墙规则,即使该步骤配置为使用成功连接到我们订阅的 ARM Azure 连接类型。
2017 年 12 月 11 日更新:这是构建过程中修改后的日志文件:
##[section]开始:执行 Azure SQL:DacpacTask
任务:Azure SQL 数据库部署说明:使用 DACPAC 部署 Azure SQL DB 或使用 SQLCMD 运行脚本版本:1.1.24 作者:Microsoft Corporation
帮助:更多信息
[调试]VstsTaskSdk 0.8.2 提交
[debug]进入D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1。
[调试]INPUT_CONNECTEDSERVICENAMESELECTOR: 'ConnectedServiceNameARM'
[调试]INPUT_TASKNAMESELECTOR:'DacpacTask'
[调试]INPUT_DACPACFILE: 'd:\a\1\s\src\Vics\bin\Release\Database.dacpac'
[调试]INPUT_SQLFILE: 'd:\a\1\s'
[调试]INPUT_SQLINLINE(空)
[调试]INPUT_SERVERNAME: 'tcp:{server}.database.usgovcloudapi.net,1433'
[调试]INPUT_DATABASENAME:'{instance}'
[调试]INPUT_CONNECTEDSERVICENAME:“{ARM ID}”
[调试]INPUT_CONNECTEDSERVICENAMEARM:''
[调试]INPUT_SQLUSERNAME:'{user}'
[调试]INPUT_SQLPASSWORD:'{pwd}'
[调试]INPUT_PUBLISHPROFILE: 'd:\a\1\s'
[调试]INPUT_ADDITIONALARGUMENTS: '/p:BlockOnPossibleDataLoss=False /p:AllowIncompatiblePlatform=True'
[调试]INPUT_SQLADDITIONALARGUMENTS(空)
[调试]INPUT_INLINEADDITIONALARGUMENTS(空)
[调试]INPUT_IPDETECTIONMETHOD:“自动检测”
[调试]INPUT_STARTIPADDRESS(空)
[调试]INPUT_ENDIPADDRESS(空)
[调试]INPUT_DELETEFIREWALLRULE:'真'
[调试] 转换为布尔值:真
[调试]从路径“D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\ps_modules\VstsAzureRestHelpers_\VstsAzureRestHelpers_.psm1”加载模块。
[debug]$OVERRIDING $global:DebugPreference 从 'Continue' 到 'SilentlyContinue'。
[调试]从以下位置加载资源字符串:D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\ps_modules\VstsAzureRestHelpers_/module.json
[调试]加载了 7 个字符串。
[debug]SYSTEM_CULTURE: 'en-US'
[调试]从以下位置加载资源字符串:D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\ps_modules\VstsAzureRestHelpers_\Strings\resources.resjson\en-US\resources.resjson
[调试]加载了 7 个字符串。
[调试] 导出函数“Add-AzureSqlDatabaseServerFirewallRule”。
[调试]导出函数“删除-AzureSqlDatabaseServerFirewallRule”。
[调试]导出函数“Get-AzStorageKeys”。
[调试]导出函数“Get-AzRMStorageKeys”。
[调试]导出函数“Get-AzRmVmCustomScriptExtension”。
[调试]导出函数“Remove-AzRmVmCustomScriptExtension”。
[调试]导出函数“Get-AzStorageAccount”。
[调试]导出函数“Get-AzRmStorageAccount”。
[调试]导出函数“Get-AzRmResourceGroup”。
[调试]导出函数“Get-AzureNetworkInterfaceDetails”。
[调试] 导出函数“Get-AzurePublicIpAddressDetails”。
[调试] 导出函数 'Get-AzureLoadBalancersDetails'。
[调试]导出函数“Get-AzureLoadBalancerDetails”。
[调试] 导出函数“Get-AzureRMLoadBalancerFrontendIpConfigDetails”。
[调试]导出函数“Get-AzureRMLoadBalancerInboundNatRuleConfigDetails”。
[调试] 导入函数“Add-AzureSqlDatabaseServerFirewallRule”。
[调试] 导入函数“Get-AzRmResourceGroup”。
[调试] 导入函数“Get-AzRmStorageAccount”。
[调试]导入函数“Get-AzRMStorageKeys”。
[调试] 导入函数“Get-AzRmVmCustomScriptExtension”。
[调试] 导入函数“Get-AzStorageAccount”。
[调试] 导入函数“Get-AzStorageKeys”。
[调试] 导入函数“Get-AzureLoadBalancerDetails”。
[调试] 导入函数“Get-AzureLoadBalancersDetails”。
[调试] 导入函数“Get-AzureNetworkInterfaceDetails”。
[调试] 导入函数 'Get-AzurePublicIpAddressDetails'。
[调试] 导入函数“Get-AzureRMLoadBalancerFrontendIpConfigDetails”。
[调试] 导入函数“Get-AzureRMLoadBalancerInboundNatRuleConfigDetails”。
[调试] 导入函数“Remove-AzRmVmCustomScriptExtension”。
[调试] 导入函数“Remove-AzureSqlDatabaseServerFirewallRule”。
[调试]从:D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24/Task.json 加载资源字符串
[调试]加载了 11 个字符串。
[debug]SYSTEM_CULTURE: 'en-US'
[调试]从以下位置加载资源字符串:D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\Strings\resources.resjson\en-US\resources.resjson
[调试]加载了 11 个字符串。
[debug]FilePath= Find-VstsFiles LegacyPattern d:\a\1\s\src\Vics\bin\Release\Database.dacpac
[debug]进入 Find-VstsFiles。
[调试] LiteralDirectory:'LegacyPattern'
[调试] LegacyPattern: 'd:\a\1\s\src\Vics\bin\Release\Database.dacpac'
[调试]输入 Get-MatchingItems。
[调试] IncludePatterns: 'd:\a\1\s\src\Vics\bin\Release\Database.dacpac'
[调试] 排除模式:''
[调试] 包含文件:“真”
[调试] 包含目录:'False'
[调试] 强制:'假'
[调试]路径:d:\a\1\s\src\Vics\bin\Release\Database.dacpac
[调试]离开 Get-MatchingItems。
[调试]找到的总数:1
[调试]离开 Find-VstsFiles。
packageFile= d:\a\1\s\src\Vics\bin\Release\Database.dacpac
[调试]服务器友好名称是 tcp:{server}
[调试]ENDPOINT_URL_d77b299c-5a4a-41cd-802e-de906dccbff0:' https ://management.usgovcloudapi.net/ '
[调试]ENDPOINT_AUTH_d77b299c-5a4a-41cd-802e-de906dccbff0: '********'
[调试]ENDPOINT_DATA_d77b299c-5a4a-41cd-802e-de906dccbff0: '{"subscriptionId":"{subscriptionId}","subscriptionName":"US Government Azure Enterprise Offer","azureSpnRoleAssignmentId":"","azureSpnPermissions":"" ,"spnObjectId":"","appObjectId":"","creationMode":"Manual","environment":"AzureUSGovernment","environmentUrl":" https://management.usgovcloudapi.net/ ","galleryUrl ":" https://gallery.usgovcloudapi.net/ ","serviceManagementUrl":" https://management.core.usgovcloudapi.net/ ","resourceManagerUrl ":" https://management.usgovcloudapi.net/ ","activeDirectoryAuthority":" https://login-us.microsoftonline.com/ ","environmentAuthorityUrl":" https://login-us.microsoftonline.com/ ","graphUrl":"https://graph.windows.net/ ","managementPortalUrl":" https://manage.windowsazure.us/ ","armManagementPortalUrl":" https://portal.azure.us ","activeDirectoryServiceEndpointResourceId":" https://management.core.usgovcloudapi.net/ ","sqlDatabaseDnsSuffix":".database.usgovcloudapi.net","AzureKeyVaultDnsSuffix":"vault.usgovclouda...
[debug]运行sqlcmd.exe -S "tcp:{server}.database.usgovcloudapi.net,1433" -U "{user}" -Q "select getdate()" 到达SqlServer检查连接
[调试]
[调试]sqlPackageArguments = /SourceFile:"d:\a\1\s\src\Vics\bin\Release\Database.dacpac" /Action:Publish /TargetServerName:"tcp:{server}.database.usgovcloudapi.net, 1433" /TargetDatabaseName:"{instance}" /TargetUser:"{user}" /TargetPassword:"********" /p:BlockOnPossibleDataLoss=False /p:AllowIncompatiblePlatform=True /TargetTimeout:120
[调试]从注册表读取的机器 factoryvm-az229 上安装的 Sql 版本:140 130 120 110
[调试]从注册表读取的版本 140 的 Sql 版本特定根目录:C:\Program Files (x86)\Microsoft SQL Server\140\
[调试]从注册表读取的版本 130 的 Sql 版本特定根目录:C:\Program Files\Microsoft SQL Server\130\
[调试]从注册表读取的版本 130 的 Sql 版本特定根目录:C:\Program Files (x86)\Microsoft SQL Server\130\
[调试]从注册表读取的版本 120 的 Sql 版本特定根目录:C:\Program Files (x86)\Microsoft SQL Server\120\
[调试]从注册表读取的版本 110 的 Sql 版本特定根目录:C:\Program Files (x86)\Microsoft SQL Server\110\
[调试]在机器 factoryvm-az229 上找不到 Dac 框架(随 SQL 安装)
[调试] Dac 框架安装在 C:\Program Files\Microsoft SQL Server\140\DAC\bin\SqlPackage.exe 机器 factoryvm-az229 上的 SQL 版本 140
[调试]获取最新的 Visual Studio 15 安装实例。
[debug]进入Invoke-VstsTool。
[调试] 文件名:'D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\vswhere.exe'
[调试] 参数:'-version [15.0,16.0) -latest -format json'
[调试] RequireExitCodeZero: 'True'
[命令]“D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\vswhere.exe”-version [15.0,16.0) -latest -format json
[调试][
[调试] {
[调试] "instanceId": "5fcd044c",
[调试] "installDate": "2017-12-01T18:36:43Z",
[调试] "installationName": "VisualStudio/15.4.5+27004.2010",
[调试] "installationPath": "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise",
[调试]“安装版本”:“15.4.27004.2010”,
[调试] "displayName": "Visual Studio Enterprise 2017",
[debug] “description”:“Microsoft DevOps 解决方案,用于跨任何规模的团队进行生产力和协调”,
[调试] "enginePath": "C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service",
[调试] "channelId": "VisualStudio.15.Release",
[调试] "channelPath": "C:\Users\packer\AppData\Local\Microsoft\VisualStudio\Packages\_Channels\4CB340F5\catalog.json",
[调试] "channelUri": " https://aka.ms/vs/15/release/channel ",
[调试] "releaseNotes": " https://go.microsoft.com/fwlink/?LinkId=660692#15.4.5 ",
[调试]“thirdPartyNotices”:“ https://go.microsoft.com/fwlink/?LinkId=660708 ”
[调试] }
[调试]]
[调试]退出代码:0
[调试]离开 Invoke-VstsTool。
[调试] Dac Framework 与 Visual Studio 一起安装在机器 factoryvm-az229 上的 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\SqlPackage.exe 中
[debug]执行SQLPackage.exe
[调试]执行:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\SqlPackage.exe" /SourceFile:"d:\a\ 1\s\src\Vics\bin\Release\Database.dacpac" /Action:Publish /TargetServerName:"tcp:{server}.database.usgovcloudapi.net,1433" /TargetDatabaseName:"{instance}" /TargetUser:" {user}" /TargetPassword:"********" /p:BlockOnPossibleDataLoss=False /p:AllowIncompatiblePlatform=True /TargetTimeout:120
发布到服务器“tcp:{server}.database.usgovcloudapi.net,1433”上的数据库“{instance}”。初始化部署(开始) 初始化部署(失败)
[调试]错误记录:
[debug]Execute-Command : *** 无法部署包。
[调试]在 D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1:178 char:9
[调试]+ Execute-Command -FileName $SqlPackagePath -Arguments $scriptA ...
[调试]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
[调试] + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
[调试] + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Execute-Command
[调试]
[调试]脚本堆栈跟踪:
[调试]在执行命令处,D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\Utility.ps1:第 235 行
[调试]在 D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1:第 178 行
[调试]在 , : 第 1 行
[调试]在,:第 22 行
[调试]在,:第 18 行
[调试]在 , : 第 1 行
[调试]异常:
[调试]Microsoft.PowerShell.Commands.WriteErrorException:*** 无法部署包。
[错误]*** 无法部署包。
[调试]已处理:##vso[task.logissue type=error]*** 无法部署包。
[调试]错误记录:
[debug]Execute-Command:无法连接到主服务器或目标服务器“{instance}”。您必须在主服务器或目标服务器“{instance}”中拥有具有相同密码的用户。
[调试]
[调试]在 D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1:178 char:9
[调试]+ Execute-Command -FileName $SqlPackagePath -Arguments $scriptA ...
[调试]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
[调试] + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
[调试] + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Execute-Command
[调试]
[调试]脚本堆栈跟踪:
[调试]在执行命令处,D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\Utility.ps1:第 235 行
[调试]在 D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1:第 178 行
[调试]在 , : 第 1 行
[调试]在,:第 22 行
[调试]在,:第 18 行
[调试]在 , : 第 1 行
[调试]异常:
[调试]Microsoft.PowerShell.Commands.WriteErrorException:无法连接到主服务器或目标服务器“{server}”。您必须在主服务器或目标服务器“{instance}”中拥有具有相同密码的用户。
[调试]
[错误]无法连接到主服务器或目标服务器“{instance}”。您必须在主服务器或目标服务器“{instance}”中拥有具有相同密码的用户。
[调试]已处理:##vso[task.logissue type=error]无法连接到主服务器或目标服务器“{instance}”。您在主服务器或目标服务器“{instance}”中必须有一个密码相同的用户。%0D%0A
[debug]没有添加防火墙规则
[调试]从任务脚本中捕获异常。
[调试]错误记录:
[调试]D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1:Azure SQL Dacpac 任务失败。
[调试]在 line:1 char:1
[调试]+ . 'd:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a ...
[调试]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
[调试] + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
[调试] + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,DeploySqlAzure.ps1
[调试]
[调试]脚本堆栈跟踪:
[调试]在 D:\a_tasks\SqlAzureDacpacDeployment_ce85a08b-a538-4d2b-8589-1d37a9ab970f\1.1.24\DeploySqlAzure.ps1:第 234 行
[调试]在 , : 第 1 行
[调试]在,:第 22 行
[调试]在,:第 18 行
[调试]在 , : 第 1 行
[调试]异常:
[调试]Microsoft.PowerShell.Commands.WriteErrorException:Azure SQL Dacpac 任务失败。
[错误]Azure SQL Dacpac 任务失败。
[调试]已处理:##vso[task.logissue type=error]Azure SQL Dacpac 任务失败。
[调试]已处理:##vso [task.complete 结果=失败]
[部分]完成:执行 Azure SQL:DacpacTask
第二个可能相关的问题是尝试运行访问该数据库的集成测试。是否有替代方法可以创建一个 powershell 脚本来连接到正确的租户并执行New-AzureSqlDatabaseServerFirewallRule
- 运行测试 - Remove-AzureSqlDatabaseServerFirewallRule
?