You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何升级Azure DevOps复杂流水线,替换废弃的DownloadBuildArtifacts@任务?

适配复杂目录树复制的替代方案

针对你遇到的DownloadBuildArtifacts@任务废弃后,CopyFiles@无法满足精准保留子目录结构的问题,以下是几个可行的解决方案:

1. PowerShell脚本实现精准复制(推荐)

编写轻量脚本即可实现只截断上层父目录、完整保留子目录结构的复制需求,无需拆分任务或修改后续流程。

示例脚本(对应你提到的A/B/C/D/E/F/G → X/D/E/F/G场景):

# 配置路径参数
$sourceBaseDir = "$(Build.SourcesDirectory)/A/B/C"
$targetBaseDir = "$(Build.ArtifactStagingDirectory)/X"

# 遍历源目录所有内容,复制并保留相对结构
Get-ChildItem -Path $sourceBaseDir -Recurse | ForEach-Object {
    $targetPath = $_.FullName.Replace($sourceBaseDir, $targetBaseDir)
    if ($_.PSIsContainer) {
        New-Item -ItemType Directory -Path $targetPath -Force | Out-Null
    } else {
        Copy-Item -Path $_.FullName -Destination $targetPath -Force
    }
}

将此脚本作为PowerShell@2任务加入流水线,仅需调整$sourceBaseDir和$targetBaseDir即可适配不同目录场景,完全匹配原DownloadBuildArtifacts@的目录复制行为。

2. 使用DownloadPipelineArtifact@2(跨流水线依赖场景)

如果你的流水线是拉取其他流水线的构建产物,直接用DownloadPipelineArtifact@2即可通过itemPattern精准选择子目录并保留结构:

- task: DownloadPipelineArtifact@2
  inputs:
    buildType: 'specific'
    project: '你的项目名称'
    definition: '依赖的构建流水线ID'
    buildVersionToDownload: 'latest'
    artifactName: '目标产物名称'
    itemPattern: 'A/B/C/**' # 指定要拉取的子目录
    targetPath: '$(Build.ArtifactStagingDirectory)/X'

该任务会自动将A/B/C/下的所有内容(含完整子目录结构)下载到X/目录下,完美满足你的需求。

3. 自定义复用任务(多流水线场景)

如果团队内多个流水线需要此功能,可以将上述PowerShell脚本打包成自定义Azure DevOps任务,上传到组织任务库中,实现一键复用,避免重复编写脚本。


内容的提问来源于stack exchange,提问作者adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:40:48