0

我有一个yaml。我需要根据另一个任务将服务连接传递给脚本/模板,该任务检索所有必需的订阅。问题是:我可以将动态值传递给服务连接吗?它给了我编译时错误。

我的代码如下:

trigger: none
pr: none

parameters:
- name: AzureSubscription
  type: object
  default: 
    xxx:
      Sub: xxx
    yyy:
      Sub: yyy

jobs:
- job:  Updating
  condition: succeeded()
  pool: 
    vmImage: "windows-latest"
  strategy:
      maxParallel: 10
      matrix: ${{ parameters.AzureSubscription }} 
  steps:
    - task: AzurePowerShell@5
      displayName: Tes
      inputs:
        azureSubscription: 'zzz'
        ScriptType: 'InlineScript'
        Inline: |
              Write-Output "subcriptionList ---- $(Sub)"
        FailOnStandardError: true
        azurePowerShellVersion: 'LatestVersion'
        pwsh: true
        
    - task: AzurePowerShell@4
      displayName: Updating
      inputs:
        **azureSubscription: ${{ sub }}** # here it is giving me error?
        ScriptType: 'FilePath'
        ScriptPath: '$(System.DefaultWorkingDirectory)/Foundation/xxxxx.ps1'
        azurePowerShellVersion: 'LatestVersion'

所以在第二个任务中,我从我的参数传递订阅。

Error is :  Unrecognized value: 'sub'. 

有人能帮我吗?

4

2 回答 2

5

这可以通过一些创造力来实现,但不是任务本身。而是使用变量并动态加载变量文件。

我通常将服务连接名称声明为单独存储库中的变量模板文件。这允许在组织中的所有项目中重用,这不是必需的,但这样会更容易。模板名称的一部分将是部署到的环境。所以一个模板文件可能被调用azure.dev.ymlazure.uat.yml看起来像:

variables:
AzureSubscriptionServiceConnectionName: Azure - Dev

然后在阶段/作业范围内定义的变量将加载模板文件,如下所示,假设将使用给定的 environmentName 传入参数或局部变量。

  variables: 
  - template: /azure.${{ parameters.environmentName }}.yml

然后阶段/作业可以通过以下方式引用此变量:

${{ variables.AzureSubscriptionServiceConnectionName }}

这是有关 YAML 管道变量范围的更多Microsoft 文档

于 2021-06-18T18:10:48.997 回答
2

您不能azureSubcription动态设置。这是已知的限制

@JoeGaggler 今天不支持此功能。发布/构建定义中服务端点的使用(Azure 订阅是其中一种)由某些权限控制。在保存发布/构建定义时,服务会验证作者(保存定义的人)在端点上具有适当的权限。如果我们支持服务端点输入的变量替换,则服务无法验证作者是否具有所需的权限,这可能会成为一个安全问题。

于 2021-06-18T15:49:59.363 回答