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

如何在Azure DevOps中获取构建定义的逻辑路径?

获取Azure DevOps构建定义的逻辑路径方案

默认预定义变量Build.DefinitionName确实不包含文件夹路径,要实现自动获取构建定义所在的逻辑路径,推荐以下两种方案:

方案1:通过REST API动态获取(全自动)

利用Azure DevOps的REST API查询当前构建定义详情,提取其所在文件夹路径并存为管道变量,供后续任务使用:

  1. 在复制工件任务前添加一个PowerShell任务,执行以下脚本:
$token = "$(System.AccessToken)"
$orgUrl = "$(System.CollectionUri)"
$projectName = "$(System.TeamProject)"
$definitionId = "$(Build.DefinitionId)"

$headers = @{
    "Authorization" = "Bearer $token"
    "Content-Type" = "application/json"
}

$apiUrl = "$orgUrl/$projectName/_apis/build/definitions/$definitionId?api-version=7.1-preview.7"
$response = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get

# 处理路径格式,移除开头的反斜杠
$definitionPath = $response.path.TrimStart('\')

# 将路径设置为管道变量
Write-Host "##vso[task.setvariable variable=Build.DefinitionPath]$definitionPath"
  1. 修改复制任务的目标路径,引入新变量:
//networkstore.local/Builds/$(Build.DefinitionPath)/$(Build.DefinitionName)/$(Build.BuildNumber)

当构建定义被移动或克隆时,API会自动返回最新的文件夹路径,无需手动修改配置。

方案2:自定义变量(半自动)

如果不想调用API,可在构建定义的变量面板中添加一个自定义变量(例如DefinitionFolderPath),手动设置为当前文件夹路径(如Utilities)。

然后将复制任务的目标路径改为:

//networkstore.local/Builds/$(DefinitionFolderPath)/$(Build.DefinitionName)/$(Build.BuildNumber)

此方案的缺点是移动或克隆构建定义时需要手动更新变量,但比直接硬编码到任务中更易维护。

注意事项

  • 使用REST API方案时,确保管道执行账号拥有读取构建定义的权限
  • API版本可根据你的Azure DevOps实例版本调整,示例中使用的是7.1-preview.7版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:56:02