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

标签 azure azure-devops yaml azure-pipelines

假设我有一个主要的 azure devops 管道 azure-pipelines.yml,我在其中调用模板部署.yml。

在主管道中,我希望能够声明哈希集/映射/字典类型的变量或参数或任何其他键值结构,然后我可以将其传递给模板。

我可以看到可以传入一个对象类型,但我无法理解它的用法。我怎样才能实现以下目标?

请注意 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"}

部署.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 }}

最佳答案

How could I achieve the following?

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

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

例如:- ${​​{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 }}

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

工作流程:将对象类型参数传递给模板。该模板将首先运行deploy zip 命令。然后它会遍历每一个传递过来的对象,并使用config settings命令将它们一一传递给webapp。

结果:

enter image description here

关于Azure DevOps YAML 模板传递哈希集/映射/字典/对象 - 键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65479130/

相关文章:

azure - 逻辑应用获取行任务仅处理 512 行?

azure-devops - 如何生成 DACPAC 文件

kubernetes - configmap更改时, Helm chart 重新启动pod

azure - ServiceBusNamespace 在部署时无效

mysql - 如何将 MySQL 转换为 SQL Azure? (Wordpress 数据库)

Azure 应用程序网关后端设置以某种方式被覆盖。我之前从30改成900,现在又回到30了

git - 如何将 SSH key 上传到 Visual Studio Team Services(用于 Git 存储库)

amazon-web-services - 我在 CloudFormation 中遇到多个安全组的问题

python - PyYAML 查找不正确的 YAML 语法错误行

azure - 如何将现有的 github yml 文件用于 Azure DevOps 管道