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

如何通过Azure DevOps REST API提取单元测试与SonarQube状态

Azure DevOps REST API 获取单元测试与SonarQube集成状态方案

一、检测Visual Studio Test任务(单元测试)状态

要判断项目是否集成单元测试(通过Visual Studio Test任务),需遍历构建定义和发布定义中的所有任务,检查是否存在对应类型任务:

  1. 所需API:

    • 构建定义API:$projectUri/_apis/build/definitions?$apiVersion(推荐使用apiVersion=7.1-preview.7)
    • 发布定义API:你已在使用的$projectUri/_apis/release/definitions?$apiVersion
  2. 检测逻辑:

    • 遍历每个构建/发布定义的阶段、作业、任务集合
    • 识别Visual Studio Test任务:任务固定ID为ef087383-ee5e-42c7-9a53-ab56c98420f9,或任务名称包含Visual Studio Test
    • 只要任意定义中存在该任务,标记为1;否则标记为0
  3. PowerShell示例片段:

# 假设已配置好认证头$headers
$buildDefs = Invoke-RestMethod -Uri "$projectUri/_apis/build/definitions?apiVersion=7.1-preview.7" -Headers $headers
$releaseDefs = Invoke-RestMethod -Uri "$projectUri/_apis/release/definitions?apiVersion=7.1-preview.7" -Headers $headers

$hasVSTest = $false

# 检查构建定义中的任务
foreach ($def in $buildDefs.value) {
    foreach ($phase in $def.process.phases) {
        foreach ($task in $phase.tasks) {
            if ($task.id -eq "ef087383-ee5e-42c7-9a53-ab56c98420f9" -or $task.name -match "Visual Studio Test") {
                $hasVSTest = $true
                break
            }
        }
        if ($hasVSTest) { break }
    }
    if ($hasVSTest) { break }
}

# 构建中未找到则检查发布定义
if (-not $hasVSTest) {
    foreach ($def in $releaseDefs.value) {
        foreach ($env in $def.environments) {
            foreach ($phase in $env.deploymentProcess.phases) {
                foreach ($task in $phase.tasks) {
                    if ($task.id -eq "ef087383-ee5e-42c7-9a53-ab56c98420f9" -or $task.name -match "Visual Studio Test") {
                        $hasVSTest = $true
                        break
                    }
                }
                if ($hasVSTest) { break }
            }
            if ($hasVSTest) { break }
        }
        if ($hasVSTest) { break }
    }
}

$vsTestStatus = if ($hasVSTest) { 1 } else { 0 }

二、检测SonarQube集成状态

判断项目是否集成SonarQube,同样需遍历构建/发布定义中的任务,查找SonarQube相关任务:

  1. 所需API:

    • 构建定义API:同上$projectUri/_apis/build/definitions?$apiVersion
    • 发布定义API:同上$projectUri/_apis/release/definitions?$apiVersion
  2. 检测逻辑:

    • 识别SonarQube核心任务:
      • SonarQube Prepare Analysis Configuration:任务ID15b84ca1-b62f-4a2a-a403-89b77a063157
      • SonarQube Analyze:任务IDcb2b9455-19e7-4a85-a666-5ca1288c656f
    • 只要任意定义中存在上述任一任务,标记为1;否则标记为0
  3. PowerShell示例片段:

$sonarTaskIds = @("15b84ca1-b62f-4a2a-a403-89b77a063157", "cb2b9455-19e7-4a85-a666-5ca1288c656f")
$hasSonarQube = $false

# 检查构建定义中的SonarQube任务
foreach ($def in $buildDefs.value) {
    foreach ($phase in $def.process.phases) {
        foreach ($task in $phase.tasks) {
            if ($sonarTaskIds -contains $task.id -or $task.name -match "SonarQube") {
                $hasSonarQube = $true
                break
            }
        }
        if ($hasSonarQube) { break }
    }
    if ($hasSonarQube) { break }
}

# 构建中未找到则检查发布定义
if (-not $hasSonarQube) {
    foreach ($def in $releaseDefs.value) {
        foreach ($env in $def.environments) {
            foreach ($phase in $env.deploymentProcess.phases) {
                foreach ($task in $phase.tasks) {
                    if ($sonarTaskIds -contains $task.id -or $task.name -match "SonarQube") {
                        $hasSonarQube = $true
                        break
                    }
                }
                if ($hasSonarQube) { break }
            }
            if ($hasSonarQube) { break }
        }
        if ($hasSonarQube) { break }
    }
}

$sonarStatus = if ($hasSonarQube) { 1 } else { 0 }

注意事项

  • 确保请求头包含有效的Azure DevOps认证凭据(如Authorization: Basic <Base64编码的PAT>)
  • API版本建议使用最新预览版,避免兼容性问题
  • 部分自定义任务名称可能有差异,同时检测任务ID和名称能提升准确率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:50:27