【问题标题】:Azure Yaml Pipelines - Dynamic object parameter to templateAzure Yaml Pipelines - 模板的动态对象参数
【发布时间】:2021-01-08 08:08:45
【问题描述】:
我想触发一个以对象为参数的作业模板。
不幸的是,即使基于这些例子,我也找不到这样做的方法。
如果有人能指导我如何实现这一目标,我将不胜感激。
我想要实现的是将 ["DEPLOY", "CONFIG"] 部分替换为动态变量:
- template: job-template.yaml
parameters:
jobs: ["DEPLOY", "CONFIG"]
【问题讨论】:
标签:
azure-devops
azure-pipelines
azure-pipelines-yaml
【解决方案1】:
这是不可能的。 YAML 在这里非常有限,你可以阅读更多关于这个here
Yaml 变量一直是字符串:字符串映射。
例如,您可以将参数定义为复杂类型
模板文件
parameters:
- name: 'instances'
type: object
default: {}
- name: 'server'
type: string
default: ''
steps:
- ${{ each instance in parameters.instances }}:
- script: echo ${{ parameters.server }}:${{ instance }}
主文件
steps:
- template: template.yaml
parameters:
instances:
- test1
- test2
server: someServer
但您无法以动态/编程方式执行此操作,因为您将创建的每个输出最终都将成为简单的字符串。
您可以做的是作为字符串传递,然后使用 powershell 拆分该字符串。但这一切都取决于您想要进一步运行什么,因为您将无法以这种方式简单地迭代 yaml 结构。你所能做的就是在 powershell 循环中运行并做一些事情,但这对你来说可能还不够。
【解决方案2】:
有一些逻辑是可能的。见下文
- template: job-template.yaml
parameters:
param: ["DEPLOY", "CONFIG"]
在 job-template.yaml 文件中你可以定义。所以每个工作名称都会不同
parameters:
param: []
jobs:
- ${{each jobName in parameters.param}}:
- job: ${{jobName}}
steps:
- task: Downl......