Azure pipelines Azure管道-如何从成功生成工件的最新管道下载工件?

Azure pipelines Azure管道-如何从成功生成工件的最新管道下载工件?,azure-pipelines,Azure Pipelines,我有一个构建和发布管道,在每次请求后运行构建阶段,并按计划运行发布阶段 构建阶段创建工件,发布阶段下载工件 我遇到的问题是,下载工件任务似乎只有在当前或以前的管道生成它们时才起作用 例如 这可能吗 这就是我用来出版的东西 -任务:PublishPipelineArtifact@1 投入: targetPath:“$(ArtifactPathToPublish)” 工件:'$(工件名称)' 发布位置:“管道” 这就是我用来下载的 -任务:DownloadPipelineArtifact@2 投

我有一个构建和发布管道,在每次请求后运行构建阶段,并按计划运行发布阶段

构建阶段创建工件,发布阶段下载工件

我遇到的问题是,下载工件任务似乎只有在当前或以前的管道生成它们时才起作用

例如

这可能吗

这就是我用来出版的东西

-任务:PublishPipelineArtifact@1
投入:
targetPath:“$(ArtifactPathToPublish)”
工件:'$(工件名称)'
发布位置:“管道”
这就是我用来下载的

-任务:DownloadPipelineArtifact@2
投入:
buildType:“特定”
项目:“a1acfe27-c376-4239-a45c-a77eddf71d6f”
管道:153
运行版本:“latestFromBranch”
runBranch:$(Build.SourceBranch)
AllowPartiallySucceedBuilds:true
项目:“${{parameters.ArtifactName}}”
路径:“$(Pipeline.Workspace)/${{parameters.ArtifactName}”
我看不到任何有助于解决我的问题的设置


目前看来,我需要一个黑客补丁来查找上次成功运行并生成工件的管道和阶段的
runId
,作为一种解决方法,我们可以通过

添加task Power shell并添加以下脚本:

$outfile = "$(System.ArtifactsDirectory)\{artifact name}.zip"
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

#Get download artifact url
$GetArtifactURL = "GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=6.1-preview.5"
$GetArtifactResult = Invoke-RestMethod -Uri $GetArtifactURL -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get 

#download artifact zip file to outfile path
$DownloadArtifactURL = $GetArtifactResult.resource.downloadUrl
$DownloadArtifact = Invoke-RestMethod -Uri $DownloadArtifactURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get –OutFile $outfile

嗨@Konzy262,这个问题怎么样?下面的答案解决了你的问题吗?如果没有,请让我知道有关此问题的最新信息?您好,正在查看此问题是否仍在阻止您?对此问题有任何更新吗?我通过使用RESTAPI查询构建端点,并使用“individualCI”上的筛选器作为原因筛选器来解决此问题。然后,我将返回的id插入现有
下载管道工件
任务的
runId
字段。您的解决方案看起来也不错,尽管在手动下载工件时需要维护更多的powershell。
$outfile = "$(System.ArtifactsDirectory)\{artifact name}.zip"
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

#Get download artifact url
$GetArtifactURL = "GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=6.1-preview.5"
$GetArtifactResult = Invoke-RestMethod -Uri $GetArtifactURL -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get 

#download artifact zip file to outfile path
$DownloadArtifactURL = $GetArtifactResult.resource.downloadUrl
$DownloadArtifact = Invoke-RestMethod -Uri $DownloadArtifactURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get –OutFile $outfile