Azure DevOps YAML模板如何传递哈希集/映射/字典/对象-键值对?

3

假设我有一个名为azure-pipelines.yml的主Azure DevOps管道,在其中调用我的模板deploy.yml。

在主管道中,我想声明一个变量或参数,类型为HashSet / Map / Dictionary或任何其他键值结构,然后将其传递给模板。

我可以看到可以传递对象类型,但我无法理解它的使用方法。我怎样才能实现以下内容?

请注意,azure-pipelines.yml中的appSettings: {"key1":"value1","key2":"value2"} 是虚构的,但非常好地展示了我希望它如何工作。

azure-pipelines.yml:

trigger:
 - main

- job: deploy
  pool:
    vmImage: ${{ parameters.poolVmImage }}
  steps:
  - template: deploy.yml
    parameters:
      azureServiceConnection: ${{ parameters.azureServiceConnection }}
      resourceGroupName: 'foo'
      appServiceName: 'bar'
      appSettings: {"key1":"value1","key2":"value2"}

deploy.yml:

parameters:
  - name: azureServiceConnection
  - name: resourceGroupName
  - name: appServiceName 
  - name: appSettings

steps:
- task: AzureCLI@2
  displayName: Deploy zip
  name: deployZip
  inputs:
    azureSubscription: ${{ parameters.azureServiceConnection }}
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az webapp deployment source config-zip \
        -g ${{ parameters.resourceGroupName }} \
        -n ${{ parameters.appServiceName }} \
        --src ./deployment.zip

      az webapp config appsettings set \
        -g ${{ parameters.resourceGroupName }} \
        -n ${{ parameters.appServiceName }} \
        --settings ${{ parameters.appSettings }}

看起来这个问题在这里得到了广泛的讨论 https://dev59.com/jFIH5IYBdhLWcg3wWcvO - undefined
这个回答解决了你的问题吗?如何将复杂的DevOps流水线模板参数传递给脚本 - undefined
嗨 @pijemcolu。关于这个工单有没有任何更新?如果答案能给你一些帮助,请随时告诉我。只是提醒一下,这里有关于如何接受答案的说明。 - undefined
1个回答

4

我该如何实现以下内容?

你确实可以使用对象类型参数。

但在模板中,你不能同时使用多个对象参数,因此需要使用每个表达式循环遍历每个对象。

例如:- ${{ each setting in parameters.appSettings }}:

这是我的示例,你可以参考:

Deploy.yml:

parameters:
  - name: azureServiceConnection
  - name: resourceGroupName
  - name: appServiceName 
  - name: appSettings
    type: object
    default: []

steps:

- task: AzureCLI@2
  displayName: Deploy zip
  name: deployZip
  inputs:
    azureSubscription: ${{ parameters.azureServiceConnection }}
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az webapp deployment source config-zip \
        -g ${{ parameters.resourceGroupName }} \
        -n ${{ parameters.appServiceName }} \
        --src ./deployment.zip


- ${{ each setting in parameters.appSettings }}: 
  - task: AzureCLI@2
    displayName: Deploy settings
    inputs:
      azureSubscription: ${{ parameters.azureServiceConnection }}
      scriptType: 'bash'
      scriptLocation: 'inlineScript'
      inlineScript: |
        az webapp config appsettings set \
          -g ${{ parameters.resourceGroupName }} \
          -n ${{ parameters.appServiceName }} \
          --settings ${{ setting }}

azure-pipelines.yml:

trigger:
 - none

parameters:
- name: InstanceArgs 
  type: object
  default: [key2=value2,key3=value3]
jobs:
- job: deploy
  pool:
    vmImage: windows-latest
  steps:

  - template: deploy.yml
    parameters:
      azureServiceConnection: '${{ parameters.azureServiceConnection }}'
      resourceGroupName: 'foo'
      appServiceName: 'bar'
      appSettings: ${{ parameters.InstanceArgs }}

注意: 由于模板中的参数是对象类型,因此主yaml文件中需要设置相同类型的参数以传递该对象。

工作流程: 将对象类型参数传递到模板中。模板将首先运行部署zip命令。然后它将遍历每个传递的对象,并使用配置设置命令逐个传递给webapp。

结果:

enter image description here


辉煌。很好的例子。 - undefined
Kevin Lu-MSFT - 你能否也分享一下你对这个问题的看法?我有一个类似但有些不同的问题,即我想在模板中使用if else逻辑,该如何操作? https://stackoverflow.com/questions/70682947/using-if-else-conditions-within-a-azure-devops-yaml-pipeline-template - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接