代码之家  ›  专栏  ›  技术社区  ›  cdie

将数组作为输入传递给Azure DevOps YAML任务

  •  0
  • cdie  · 技术社区  · 7 年前

    NuGetCommand@2 要完成这项任务:

    - task: NuGetCommand@2
      inputs:
        command: pack
        packagesToPack: $(Build.SourcesDirectory)/src/HTS_MessageEngine.Communication/HTS_MessageEngine.Communication.csproj
        majorVersion: $(majorVersion)
        minorVersion: $(minorVersion)
        patchVersion: $(patchVersion)
        versioningScheme: byPrereleaseNumber
    

    但是,我必须为每个项目复制此块3次。有没有办法在PackageTopack参数中指定项目数组?到目前为止,每个包的版本都是相同的,所以我不需要三个不同的块。。。

    1 回复  |  直到 7 年前
        1
  •  14
  •   Beej    6 年前

    您可以使用每个函数(如果此时可用):

    # my-template.yml
    parameters:
    steps:
    - ${{ each project in parameters.projects }}:
      - task: PublishBuildArtifacts@1
        displayName: 'Publish ${{ project }}
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)/${{ project }}.zip'
    
    # ci.yml
    steps:
    - template: my-template.yml
      parameters:
        projects:
        - test1
        - test2
    

    此功能的Github PR: https://github.com/Microsoft/azure-pipelines-yaml/pull/2#issuecomment-452748467

        2
  •  4
  •   Krzysztof Madej    5 年前

    对于上述代码,我在运行生成时遇到此异常:

    my-template.yml (Line: 1, Col: 12): Unexpected value ''
    

    但这对我来说很有用:

    # my-template.yml
    parameters:
    - name: projects
      type: object
      default: {}
    steps:
    - ${{ each project in parameters.projects }}:
      - task: PublishBuildArtifacts@1
        displayName: 'Publish ${{ project }}
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)/${{ project }}.zip'
    

    然后:

    # ci.yml
    steps:
    - template: my-template.yml
      parameters:
        projects:
        - test1
        - test2