通过 Azure DevOps Pipelines 部署 DACPAC 时出错
Error when deploying DACPAC via Azure DevOps Pipelines
我正在使用通过 Azure DevOps Pipelines 部署的 Azure SQL 数据库刷新 CI/CD 进程。我正在使用 Adventure works 数据库并设置了一个导入架构的 visual studio 项目。
我有一个管道配置为发布 dacpac 和 运行 使用 SqlAzureDacpacDeployment@1 的后续部署,我收到以下错误:
2020-10-10T02:36:34.1421137Z ##[error]Unable to connect to target server 'server.database.windows.net'. Please verify the connection information such as the server name, login credentials, and firewall rules for the target server.
2020-10-10T02:36:34.1605855Z ##[error]Windows logins are not supported in this version of SQL Server.
2020-10-10T02:36:34.2143924Z ##[error]The Azure SQL DACPAC task failed. SqlPackage.exe exited with code 1.Check out how to troubleshoot failures at https://aka.ms/sqlazuredeployreadme#troubleshooting-
2020-10-10T02:36:34.2522414Z ##[section]Finishing: SqlAzureDacpacDeployment
我正在使用 windows 最新版本,这是我的 YAML 管道:
trigger:
- master
pool:
vmImage: 'windows-latest'
jobs:
- job: BuildDeploySQL
variables:
- group: SQLServerLogin
steps:
- task: VSBuild@1
inputs:
solution: '**\*.sln'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)'
publishLocation: 'pipeline'
- task: SqlAzureDacpacDeployment@1
inputs:
azureSubscription: 'Subscription Name here'
AuthenticationType: 'server'
ServerName: 'server.database.windows.net'
DatabaseName: 'AdventureWorks'
SqlUsername: 'sqladmin'
SqlPassword: ${{ variables.Password }}
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '$(Pipeline.Workspace)\s\AdventureWorks\bin\Debug\*.dacpac'
IpDetectionMethod: 'AutoDetect'
我已尝试从我的本地计算机进行部署,并且使用相同的 sql 凭据成功部署。此外,我已确认 SQL 数据库已启用 Azure 服务。我还尝试将 dacpac 部署到一个新的空数据库并得到同样的错误。
我相信这可能只是一条一般性错误消息,因为我的部署日志显示已成功连接到服务器:
2020-10-10T02:36:18.7912964Z Invoke-Sqlcmd -ServerInstance "server.database.windows.net" -Database "AdventureWorks" -Username "sqladmin" -Password ****** -Inputfile
....
2020-10-10T02:36:33.0554895Z Initializing deployment (Start)
** 更新
只是为了排除我确实创建了一个新的 SQL Login with DBO_owner permissions 和 运行 deployment 使用它并得到了相同的错误消息。
以上错误可能是因为构建代理 ip 不是 allow-listed 在您的 Azure SQL 数据库的防火墙规则中。请参阅关于 IP ranges for Microsoft-hosted agents 的 link。
您可以检查您的 azure 数据库的防火墙规则设置,并尝试允许所有 IP 范围。
您还可以添加 Azure CLi 任务以获取代理 ip 并为您的 azure 数据库设置防火墙规则以允许代理 ip 在您的管道中动态。参见 this thread。
steps:
- task: AzureCLI@2
displayName: 'Azure CLI '
inputs:
azureSubscription: 'azureSubscription'
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
$agentIp = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"
az sql server firewall-rule create -g $(rg) -s $(server) -n test --start-ip-address $agentIp --end-ip-address $agentIp
您还可以在本地 machine/Azure VM 上创建 self-hosted agent。 运行 您在此 self-hosted 代理上的管道。请注意 allow-list Azure 数据库的本地机器 IP。
根本问题是密码机密包含逃脱 Powershell 的字符。将秘密包装在“”中解决了它。
我正在使用通过 Azure DevOps Pipelines 部署的 Azure SQL 数据库刷新 CI/CD 进程。我正在使用 Adventure works 数据库并设置了一个导入架构的 visual studio 项目。
我有一个管道配置为发布 dacpac 和 运行 使用 SqlAzureDacpacDeployment@1 的后续部署,我收到以下错误:
2020-10-10T02:36:34.1421137Z ##[error]Unable to connect to target server 'server.database.windows.net'. Please verify the connection information such as the server name, login credentials, and firewall rules for the target server.
2020-10-10T02:36:34.1605855Z ##[error]Windows logins are not supported in this version of SQL Server.
2020-10-10T02:36:34.2143924Z ##[error]The Azure SQL DACPAC task failed. SqlPackage.exe exited with code 1.Check out how to troubleshoot failures at https://aka.ms/sqlazuredeployreadme#troubleshooting-
2020-10-10T02:36:34.2522414Z ##[section]Finishing: SqlAzureDacpacDeployment
我正在使用 windows 最新版本,这是我的 YAML 管道:
trigger:
- master
pool:
vmImage: 'windows-latest'
jobs:
- job: BuildDeploySQL
variables:
- group: SQLServerLogin
steps:
- task: VSBuild@1
inputs:
solution: '**\*.sln'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)'
publishLocation: 'pipeline'
- task: SqlAzureDacpacDeployment@1
inputs:
azureSubscription: 'Subscription Name here'
AuthenticationType: 'server'
ServerName: 'server.database.windows.net'
DatabaseName: 'AdventureWorks'
SqlUsername: 'sqladmin'
SqlPassword: ${{ variables.Password }}
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '$(Pipeline.Workspace)\s\AdventureWorks\bin\Debug\*.dacpac'
IpDetectionMethod: 'AutoDetect'
我已尝试从我的本地计算机进行部署,并且使用相同的 sql 凭据成功部署。此外,我已确认 SQL 数据库已启用 Azure 服务。我还尝试将 dacpac 部署到一个新的空数据库并得到同样的错误。
我相信这可能只是一条一般性错误消息,因为我的部署日志显示已成功连接到服务器:
2020-10-10T02:36:18.7912964Z Invoke-Sqlcmd -ServerInstance "server.database.windows.net" -Database "AdventureWorks" -Username "sqladmin" -Password ****** -Inputfile
....
2020-10-10T02:36:33.0554895Z Initializing deployment (Start)
** 更新 只是为了排除我确实创建了一个新的 SQL Login with DBO_owner permissions 和 运行 deployment 使用它并得到了相同的错误消息。
以上错误可能是因为构建代理 ip 不是 allow-listed 在您的 Azure SQL 数据库的防火墙规则中。请参阅关于 IP ranges for Microsoft-hosted agents 的 link。
您可以检查您的 azure 数据库的防火墙规则设置,并尝试允许所有 IP 范围。
您还可以添加 Azure CLi 任务以获取代理 ip 并为您的 azure 数据库设置防火墙规则以允许代理 ip 在您的管道中动态。参见 this thread。
steps:
- task: AzureCLI@2
displayName: 'Azure CLI '
inputs:
azureSubscription: 'azureSubscription'
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
$agentIp = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"
az sql server firewall-rule create -g $(rg) -s $(server) -n test --start-ip-address $agentIp --end-ip-address $agentIp
您还可以在本地 machine/Azure VM 上创建 self-hosted agent。 运行 您在此 self-hosted 代理上的管道。请注意 allow-list Azure 数据库的本地机器 IP。
根本问题是密码机密包含逃脱 Powershell 的字符。将秘密包装在“”中解决了它。