假设我有一个主要的 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。
结果:
关于Azure DevOps YAML 模板传递哈希集/映射/字典/对象 - 键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65479130/