繁体   English   中英

从另一个管道构建下载工件内容

[英]Download artifact contents from another pipeline build

我有两个 azure devops 管道,如下所示:

  • 第一个创建名为“AncientArtifact-1.2.0.$(Build.BuildId)”的工件。
  • 第二个尝试使用配置如下的下载构建工件任务来使用这个工件: 在此处输入图片说明

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

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

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

想到了一些方法:

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

有没有更好的方法来处理这个问题?

您也许可以通过复制文件任务和通配符沿着一条路线走下去,以获得您想要的东西。

但是,如果您最终想要重命名工件文件夹以包含在第二个管道中,我会在您下载它后重命名工件文件夹。

如果它简单地解决了问题并且易于理解,我不会称之为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'

与 Eric 不同,这里我只是按照你的想法 1保留在工件名称中指定的$(Build.buildId)

如果将pipeline2system.debug设置为true ,您将看到任务DownloadBuildArtifacts本身根据使用的不同构建生成一个环境变量: BuildNumber

在此处输入图片说明

只需使用它,设置DownloadBuildArtifacts任务的reference nameref

然后,您可以在接下来的步骤中调用此变量以获取buildid值: $(ref.BuildNumber)

同时,您可以通过保留工件名称中包含$(Build.BuildId)值来使用复制文件任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM