通过Azure DevOps管道部署DACPAC时出错

时间:2020-10-10 02:50:54

标签: azure azure-devops azure-sql-database azure-pipelines dac

我正在使用通过Azure DevOps Pipelines部署的Azure SQL DB清除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)

**更新 只是为了排除这一点,我确实创建了一个具有DBO_owner权限的新SQL登录名,并使用该登录名运行了部署,并得到了相同的错误消息。

2 个答案:

答案 0 :(得分:1)

以上错误可能是因为Azure SQL数据库的防火墙规则中不允许列出生成代理ip。请参阅有关IP ranges for Microsoft-hosted agents的此链接。

您可以检查Azure数据库的防火墙规则设置,并尝试允许所有IP范围。

您还可以添加Azure CLi任务来获取代理ip,并为azure数据库设置防火墙规则以允许代理ip在您的管道中动态运行。参见this thread

engine: 'postcss'

您还可以在本地计算机/ Azure VM上创建self-hosted agent。并在此自托管代理上运行管道。请注意,允许为azure数据库列出本地计算机ip。

答案 1 :(得分:0)

根本问题是密码机密包含逃脱Powershell的字符。将秘密包裹在“”中即可解决该问题。