【问题标题】: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......
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-22
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        相关资源
        最近更新 更多