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

如何通过Azure DevOps CLI或API获取多仓库流水线的分支与提交ID?

在Azure DevOps YAML流水线中获取多仓库资源的分支与提交ID

可以通过Azure DevOps CLI或者ADO REST API实现需求,以下是两种方案的具体PowerShell脚本,均可获取所有配置的仓库资源信息,以及指定仓库的分支和提交ID。

方案一:使用Azure DevOps CLI实现

前置条件

  • 已安装Azure DevOps CLI(可通过az extension add --name azure-devops安装)
  • 已完成ADO CLI登录(流水线内运行时可自动使用系统身份,本地运行需执行az devops login --org <组织URI>)

PowerShell脚本

# 流水线内可直接使用预定义环境变量,本地运行需手动替换为实际值
$organizationUri = $env:SYSTEM_COLLECTIONURI
$projectName = $env:SYSTEM_TEAMPROJECT
$buildId = $env:BUILD_BUILDID

# 获取当前流水线运行的完整详情
$runDetails = az pipelines runs show --org $organizationUri --project $projectName --id $buildId --output json | ConvertFrom-Json

# 提取所有配置的仓库资源
$allRepoResources = $runDetails.resources.repositories

# 输出所有仓库资源信息
Write-Host "所有仓库资源信息:"
$allRepoResources | ForEach-Object {
    Write-Host "------------------------"
    Write-Host "仓库别名:$($_.alias)"
    Write-Host "仓库ID:$($_.repository.id)"
    Write-Host "完整分支引用:$($_.refName)"
    Write-Host "提交ID:$($_.version.id)"
}

# 获取指定别名的仓库信息(替换为你的目标仓库别名)
$targetAlias = "repo2"
$targetRepo = $allRepoResources | Where-Object { $_.alias -eq $targetAlias }
if ($targetRepo) {
    Write-Host "`n目标仓库($targetAlias)详情:"
    Write-Host "分支名:$($targetRepo.refName -replace 'refs/heads/','')"
    Write-Host "提交ID:$($targetRepo.version.id)"
} else {
    Write-Host "`n未找到别名为$targetAlias的仓库资源"
}

方案二:使用ADO REST API实现

前置条件

  • 拥有个人访问令牌(PAT),需赋予Build(读取)和Code(读取)权限
  • 流水线内运行时,需在代理作业中勾选「允许脚本访问OAuth令牌」,可直接使用SYSTEM_ACCESSTOKEN作为PAT

PowerShell脚本

# 流水线内使用预定义变量,本地运行手动替换参数
$organizationUri = $env:SYSTEM_COLLECTIONURI
$buildId = $env:BUILD_BUILDID
$pat = $env:SYSTEM_ACCESSTOKEN # 本地运行替换为你的PAT字符串

# 构建API请求URL
$apiUrl = "$organizationUri/_apis/build/builds/$buildId?api-version=7.1-preview.7&includeResources=true"

# 构建认证头
$base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))
$headers = @{ Authorization = "Basic $base64Auth" }

# 发送API请求获取流水线详情
try {
    $runDetails = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get -ContentType "application/json"
} catch {
    Write-Host "API请求失败:$($_.Exception.Message)"
    exit 1
}

# 提取所有仓库资源
$allRepoResources = $runDetails.resources.repositories

# 输出所有仓库资源信息
Write-Host "所有仓库资源信息:"
$allRepoResources | ForEach-Object {
    Write-Host "------------------------"
    Write-Host "仓库别名:$($_.alias)"
    Write-Host "仓库名称:$($_.repository.name)"
    Write-Host "完整分支引用:$($_.refName)"
    Write-Host "提交ID:$($_.version.id)"
}

# 获取指定别名的仓库信息
$targetAlias = "repo2"
$targetRepo = $allRepoResources | Where-Object { $_.alias -eq $targetAlias }
if ($targetRepo) {
    Write-Host "`n目标仓库($targetAlias)详情:"
    Write-Host "分支名:$($targetRepo.refName -replace 'refs/heads/','')"
    Write-Host "提交ID:$($targetRepo.version.id)"
} else {
    Write-Host "`n未找到别名为$targetAlias的仓库资源"
}

关键说明

  • 两种方案返回的resources.repositories集合包含所有通过YAML流水线resources配置的仓库
  • refName为完整分支引用(如refs/heads/main),可通过字符串替换提取短分支名
  • version.id即为该仓库在流水线运行时使用的提交ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:45:24