代码之家  ›  专栏  ›  技术社区  ›  Herman Cordes

如何在池需求中使用矩阵变量?

  •  3
  • Herman Cordes  · 技术社区  · 6 年前

    与此问题相关的管道yaml文件是以下部分:

    resources:
    - repo: self
    
    trigger: none
    
    jobs:
    - job: RunOnEveryAgent
      strategy:
        maxParallel: 3
        matrix:
          agent_1:
            agentName: Hosted Agent
          agent_2:
            agentName: Hosted VS2017 2
          agent_3:
            agentName: Hosted VS2017 3
      pool:
        name: Hosted VS2017
        demands:
        - msbuild
        - visualstudio
        - Agent.Name -equals $(agentName)
    
      steps:
      - (etc.)
    

    通过这个脚本,我尝试设置一个矩阵,在池中的三个代理中的每个代理上运行一次。但是,当我试图引用请求列表上的代理时,它没有接收到请求。实际错误消息如下:

    代理人姓名-等于$(agentName)

    如果我硬编码特工的名字 工作:

        demands:
        - msbuild
        - visualstudio
        - Agent.Name Hosted VS2017 3
    

    0 回复  |  直到 6 年前
        1
  •  3
  •   Wim    5 年前

    但是,您可以使用模板include语法( https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops )并将agentname作为参数传入。

    因此,您在自己的YAML文件中的构建作业可能如下所示:

    parameters:
      agentName1: ''
      agentName2: ''
      agentName3: ''
    
    jobs:
    - job: RunOnEveryAgent
      strategy:
        maxParallel: 3
        matrix:
          agent_1:
            agentName: ${{ parameters.agentName1 }}
          agent_2:
            agentName: ${{ parameters.agentName2 }}
          agent_3:
            agentName: ${{ parameters.agentName3 }}
      pool:
        name: Hosted VS2017
        demands:
        - msbuild
        - visualstudio
        - Agent.Name -equals ${{ parameters.agentName3 }}
    
      steps:
    

    你的主要 azure-pipelines.yml

    resources:
    - repo: self
    
    trigger: none
    
    jobs:
      - template: buildjob.yml
        parameters:
          agentName1: 'Hosted Agent'
          agentName2: 'Hosted VS2017 2'
          agentName3: 'Hosted VS2017 3'
    
        2
  •  2
  •   Bony    4 年前
    parameters:
      - name: agentNames
        type: object
        default: []
    jobs:
    - job: RunOnEveryAgent
      strategy:
        matrix:
           ${{ each agentName in parameters.agentNames }}:
            ${{ agentName }}:
             agentName: ${{ agentName }}
      pool:
        name: Hosted VS2017
        demands:
        - msbuild
        - visualstudio
        - Agent.Name -equals $(agentName)
    

    这将是一个更好的解决方案,如果你想在未来添加更多的代理