关于持续集成:将数组作为输入传递给 Azure DevOps YAML 任务

Pass array as inputs to Azure DevOps YAML task

我正在尝试配置一个 CI,它将在 Azure DevOps 上生成 NuGet 包作为工件(稍后将推送到我的 NuGet 服务器)。

为此,我在 Azure DevOps 上使用 Builds Pipelines,YAML 版本。

我有 3 个项目应该构建包。我正在使用 NuGetCommand@2 来完成这项任务:

1
2
3
4
5
6
7
8
- 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 次。有没有办法在 packagesToPack 参数中指定一组项目?到目前为止,每个包的版本都是相同的,所以我不需要三个不同的块...

注意:这3个项目都是3个NetStandard,包构建的属性直接存储在csproj中


你可以使用每个功能(如果它在此时可用的话):

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

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


对于上面的代码,我在运行构建时遇到了这个异常:

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

但这对我有用:

1
2
3
4
5
6
7
8
9
10
11
# 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'

然后:

1
2
3
4
5
6
7
# ci.yml
steps
:
- template
: my-template.yml
  parameters
:
    projects
:
   - test1
    - test2