在Yaml管道中参数化来自变量组的AzureSubscription

时间:2020-07-13 11:51:36

标签: azure azure-devops yaml pipeline azure-keyvault

我将Yaml用于Azure devops管道。 我为此使用了分层样式。

我有一个顶级Yaml:feature.yaml 具有以下结构:

trigger:
...
pool:
  vmImage: ...
  
variables:
  group: ...

stages:
  - template: deploy.yaml
    parameters:
      subName: $(subscription) #This should be taken from Variable group

我的deploy.yaml为:

stages:
    - stage: deploy
      jobs:
        - job: deploy
          steps:
          - task: AzureKeyVault@1
            inputs:
              azureSubscription: $(paramaters.subName) #This should be resolved from parameter passed form feature.yaml
              KeyVaultName: ...
              SecretsFilter: '*'
              RunAsPreJob: true

但是,每当我从Azure DevOps运行它时,都会出现此错误:

There was a resource authorization issue: "The pipeline is not valid. Job deploy: Step AzureKeyVault input ConnectedServiceName references service connection $(paramaters.subName) which could not be found. The service connection does not exist or has not been authorized for use. For authorization details, refer to https://aka.ms/yamlauthz."

似乎管道无法解析变量组中的azureSubscription名称值。

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

对于寻求解决方案的人

这是您需要做的: 在顶级feature.yaml中,添加所需的变量组名称,并从具有天蓝色订阅名称的模板中传入参数:

variables:
  - group: xxx

  - template: deploy.yaml
    parameters:
      subName: $(_subscriptionName)

并在模板deploy.yaml中使用该参数:

- task: AzureKeyVault@1
  inputs:
     azureSubscription: ${{ parameters.subName}}
     keyVaultName: xxx
     secretsFilter: '*'

当前存在一个已知问题,我们无法按照this线程将变量组中的变量直接用于AzureKeyVault任务的azureSubscription输入。

解决这个问题应该可以!

答案 2 :(得分:0)

我们有与此类似的问题,这是因为我们错过了Yaml中变量下的-:

{gtsummary}

收件人:

variables:
  group: ...

这为我们解决了这个问题。

答案 3 :(得分:0)

我发现,最初解析YAML时,它希望变量组在范围内。我需要将变量组移动到YAML文件的顶部,然后它找到了Azure订阅变量。不是我所期望的。