Azure DevOps SQL DacPac 部署无法与服务连接一起使用

问题描述 投票:0回答:1

对于我们的一个客户,我正在 Azure DevOps 中为 Azure SQL 数据库配置构建和部署管道。我们之前已经这样做过很多次,没有出现任何问题,但这是我第一次使用“工作负载身份联合”类型的服务连接。 我已根据需要修改了 YAML 代码并将变量组连接到管道,但我不断收到以下错误:

存在资源授权问题:“管道无效。作业部署_job_prod:步骤输入 azureSubscription 引用服务连接 DEVOPS_mdwh_connection_prod,无法找到。服务连接不存在、已被禁用或尚未授权使用。

由于服务连接的名称是正确的并且是根据变量组中的变量进行配置的,因此我知道可以访问它们。按错误消息旁边的“授权资源”按钮似乎没有执行任何操作。我尝试将 YAML 脚本中的 AuthorizationType 更改为 servicePrincipal、WorkloadIdentityFederation 或只是禁用它,但这似乎也没有什么区别。

我在这里有点不知所措。 Microsoft 现在建议在服务主体上使用工作负载联合身份验证,因此我不愿意改回这一点。这里有人能帮我弄清楚我错过了什么吗?以下是正在使用的 YAML 代码以及服务连接设置:

- name: env
  displayName: Environment
  type: string
  values:
    - tst
    - acc
    - prod
- name: ServiceConnectionPrefix
  displayName: Service Connection Prefix
  type: string
- name: SQLDatabaseName
  displayName: SQL Database Name
  type: string
- name: SQLProjectName
  displayName: SQL Project Name
  type: string

jobs:
  - deployment: deployment_job_${{ parameters.env }}
    displayName: Deployment Job ${{ parameters.env }}
    environment: Deploy to ${{ parameters.env }}
    variables:
      - group: 'VG-MDWH-${{ upper(parameters.env) }}'

    strategy:
      runOnce:
        deploy:
          steps:
            - checkout: self
              displayName: 1. Retrieve repository

            - task: SqlAzureDacpacDeployment@1
              displayName: 2. Deploy DACPAC
              inputs:
                azureSubscription: '${{ parameters.ServiceConnectionPrefix}}${{ parameters.env }}'
                ## AuthenticationType: 'WorkloadIdentityFederation'
                ServerName: '$(ServerName)'
                DatabaseName: '${{ parameters.SQLDatabaseName }}'
                deploymentType: 'DacpacTask'
                DeploymentAction: 'Publish'
                DacpacFile: '$(Pipeline.Workspace)/${{ parameters.SQLProjectName }}/${{ parameters.SQLProjectName }}/bin/debug/${{ parameters.SQLProjectName }}.dacpac'
                PublishProfile: '$(Pipeline.Workspace)/${{ parameters.SQLProjectName }}/${{ parameters.SQLProjectName }}/${{ parameters.SQLProjectName }}_${{ parameters.env }}.publish.xml'

服务连接设置:

Service connection configuration

正如您在此处看到的,服务连接也没有限制:

Connection security

如有任何帮助,我们将不胜感激。

azure azure-devops azure-pipelines azure-sql-database azure-pipelines-yaml
1个回答
0
投票

由于服务连接的名称是正确的并且是根据变量组中的变量配置的

TL;DR 服务连接名称不能存储在变量组中。将它们声明为 YAML 管道或模板中的变量。

更多详情

变量组中的变量在运行时可用,因此它们仅在管道启动后可用。

鉴于服务连接是一种受保护的资源,需要在管道启动之前(即在编译时)进行授权,我们不能使用变量组中的变量。

© www.soinside.com 2019 - 2024. All rights reserved.