从另一个管道版本下载工件内容

时间:2020-02-15 14:58:35

标签: azure azure-devops azure-devops-extensions

我有两个蔚蓝的devops管道,如下所示:

  • 第一个创建名为“ AncientArtifact-1.2.0。$(Build.BuildId)”的工件。
  • 第二个尝试通过配置如下的Download Build Artifacts任务尝试使用此工件: enter image description here

这将在第二个管道构建的$(CustomDestinationFolder)内创建一个名为“ AncientArtifact-1.2.0.12345”的文件夹(第一个管道,最新的BuildId = 12345)。

我想将上述文件夹重命名为“ ancient”,然后将其移动到第二个管道构建中的另一个目录中,以包含在第二个管道工件中。

我尝试使用copy files任务,但是问题是我不知道下载的工件文件夹的名称,因此我只能将其父文件夹$(CustomDestinationFolder)指定为源文件夹,因此我的目标文件夹将看起来像$(destinationFolder)\ AncientArtifact-1.2.0.12345 *。 使用flattenFolders选项将使所有内容变平,这不是我想要的。

想到一些方法:

  • 从工件名称中删除$(Build.BuildId)。这样,我知道下载的工件将具有的确切名称。问题是我想保留它。
  • 第二个管道中的自定义脚本,它将列出$(CustomDestinationFolder)内的文件夹,获取工件文件夹的名称,并将其重命名为硬编码的“古代”名称。感觉有点黑。

有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

您也许可以使用复制文件任务和通配符来获取所需的内容。

但是,如果您最终想要重命名工件文件夹以包含在第二个管道中,那么我将在下载工件文件夹之后继续对其进行重命名。

如果它简单地解决了问题并且易于理解,我不会称其为hackish。

- task: DownloadBuildArtifacts@0
  inputs:
    buildType: 'specific'
    project: 'your-project'
    pipeline: 'your-pipeline'
    buildVersionToDownload: 'latest'
    downloadType: 'specific'
    downloadPath: '$(System.ArtifactsDirectory)\customLocation'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: Get-ChildItem $(System.ArtifactsDirectory)\customLocation | Rename-Item -NewName 'ancient'

答案 1 :(得分:0)

与Eric不同,在这里,我只是通过在工件名称中指定$(Build.buildId)来遵循您的 idea1

如果将system.debug的{​​{1}}设置为pipeline2,您将看到任务true本身根据使用的不同构建生成一个环境变量:{{1 }}

enter image description here

只需利用它,就将DownloadBuildArtifacts任务中的BuildNumber设置为reference name

然后,您可以在后续步骤DownloadBuildArtifacts中调用此变量以获取ref的值。

与此同时,您可以通过使工件名称包含其中的buildid值来使用复制文件任务。