azure - Azure DevOps YAML模板传递哈希集/映射/字典/对象-键值?
问题描述
假设我有一个主要的 azure devops 管道 azure-pipelines.yml,我在其中调用了我的模板 deploy.yml。
在主管道中,我希望能够声明散列集/映射/字典类型的变量或参数或任何其他可以传递给模板的键值结构。
我可以看到可以传入对象类型,但我无法理解它的用法。我怎样才能实现以下目标?
请注意appSettings: {"key1":"value1","key2":"value2"}
azure-pipelines.yml 中的内容是一种幻想,但很好地展示了我希望它如何工作。
天蓝色管道.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 }}
解决方案
我怎样才能实现以下目标?
您确实可以使用对象类型参数。
但是在模板中,不能一次使用多个对象参数,所以需要使用每个表达式循环遍历每个对象。
例如: - ${{ each setting in parameters.appSettings }}:
这是我的示例,您可以参考:
部署.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 }}
天蓝色管道.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 }}
注意:由于模板中的参数是obejct类型,所以需要在主yaml文件中设置相同类型的参数来传递对象。
工作流程:将对象类型参数传递给模板。该模板将首先运行 deploy zip 命令。然后它会遍历每一个传递的对象,并使用config settings命令将它们一个一个传递给webapp。
结果:
推荐阅读
- c# - 通过脚本设置文本宽度组件
- mysql - Sequelize:如何利用多个运算符创建带有排除子句的对象提取
- microsoft-graph-api - Microsoft Graph API 的驱动器搜索结果中缺少 createdBy 和 lastModifiedBy 字段
- javascript - 在 JS 中导入 .dat 文件
- windows - 使用 Powershell 脚本自动执行组策略 Windows 操作系统设置
- boolean-algebra - 如何使用布尔代数简化?
- tensorflow - 在张量流中实现余弦相似度
- java - 按回车时程序不会继续。如何修复此错误?
- sqlite - Sqlite fts4如何通过中间字母匹配文本
- javascript - jQuery - 在鼠标单击或按住时为单元格着色