首页 > 解决方案 > 有没有办法为 Azure Devops 的 yaml 管道中的任务动态分配名称?

问题描述

我正在使用 DownloadPipelineArtifact@2 任务并循环遍历一系列管道以下载每个管道的工件。我想在后续任务中使用每个任务的 $(BuildNumber) 输出。

${{ each p in pipelines }}:
  - task: DownloadPipelineArtifact@2
    displayName: 'Download ${{ p.alias }} Artifact - ${{ p.artifact }}'
    name: 'Download_${{ p.alias }}'
    inputs:
      buildType: specific
      project: $(System.TeamProjectId)
      pipeline: ${{ p.id }}
      preferTriggeringPipeline: false
      runVersion: latestFromBranch
      runBranch: 'refs/heads/${{ p.branch }}'
      artifact: ${{ p.artifact }}
      patterns: ${{ p.patterns }}
      targetPath: '$(Pipeline.Workspace)/artifacts/${{ p.alias }}/${{ p.artifact }}'

不幸的是,我无法这样做,因为我需要通过任务名称来引用任务,并且我无法为任务分配动态名称。我收到一条错误消息

有效名称只能包含字母数字字符和“_”,并且不能以数字开头。

我尝试使用运行时变量、表达式和名称计数器,但都失败并出现相同的错误。我在这里假设名称字段不是动态分配的。

没有名称字段一切正常。但据我了解,我需要任务的名称来引用它并提取它的输出。就像是:

{{ taskName.BuildNumber }}

如果有人知道我可以动态分配名称或通过它为循环中的每个任务提取 $(BuildNumber) 的任何方式,请告诉我。谢谢!

标签: azure-devopsazure-pipelinesazure-pipelines-build-taskazure-pipelines-yamlazure-pipelines-tasks

解决方案


有没有办法为 Azure Devops 的 yaml 管道中的任务动态分配名称?

恐怕没有这种方法可以为Azure Devops的yaml管道中的任务动态分配名称因为任务本身不包含该Name字段,Name所以下载的工件的名称由构建期间生成的工件的名称确定。本任务只需要下载神器,所以本任务不包含改名字段。当我们在该字段的值中使用任何变量时,编译器将解析该字段,然后它将向我们抛出您问题中提到的错误:

在此处输入图像描述

在此处输入图像描述


推荐阅读