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

如何用C#向Azure Pipelines发起REST调用查询构建ID及状态

C#调用Azure DevOps Pipeline REST接口获取构建状态实现方案

前置准备

  • 提前生成Azure DevOps个人访问令牌(PAT),授予对应项目的生成(Build)读取权限,无有效令牌调用接口会返回401未授权。
  • 从你持有的Pipeline URL中提取基础参数:组织名、项目名、Pipeline定义ID,若URL本身带buildId参数可直接解析复用,无需额外拉取构建列表。
    常规Pipeline定义页URL格式:https://dev.azure.com/{组织名}/{项目名}/_build?definitionId={定义ID}
    单次构建详情页URL格式:https://dev.azure.com/{组织名}/{项目名}/_build/results?buildId={构建ID}&view=results

鉴权配置

Azure DevOps REST API采用Basic认证,PAT作为密码,用户名留空即可,C#中HttpClient配置代码如下:

using System.Net.Http.Headers;
using System.Text.Json.Nodes;

// 替换为你自己的PAT
string pat = "你的个人访问令牌";
var patEncoded = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($":{pat}"));
using var httpClient = new HttpClient
{
    BaseAddress = new Uri("https://dev.azure.com/")
};
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", patEncoded);

获取目标构建ID

如果URL中没有直接带buildId,调用构建列表接口拉取指定Pipeline下最新的构建记录即可拿到ID:

// 替换为从URL解析出的实际参数
string org = "你的组织名";
string project = "你的项目名";
int definitionId = 123; // 从URL的definitionId参数提取

// 拉取指定Pipeline最新1条构建记录
string getBuildListUrl = $"{org}/{project}/_apis/build/builds?definitions={definitionId}&$top=1&api-version=7.1";
var listResponse = JsonNode.Parse(await httpClient.GetStringAsync(getBuildListUrl));
int targetBuildId = listResponse["value"][0]["id"].GetValue<int>();

如果你需要查历史某一次构建,可在接口上增加时间筛选、分支筛选参数,匹配你需要的构建记录即可。

查询构建/作业执行结果

拿到构建ID后,调用构建详情接口即可获取执行状态:

string getBuildDetailUrl = $"{org}/{project}/_apis/build/builds/{targetBuildId}?api-version=7.1";
var buildDetail = JsonNode.Parse(await httpClient.GetStringAsync(getBuildDetailUrl));

string status = buildDetail["status"].GetValue<string>();
string result = buildDetail["result"]?.GetValue<string>();

if (!status.Equals("completed", StringComparison.OrdinalIgnoreCase))
{
    Console.WriteLine($"构建未执行完成,当前状态:{status}");
    return;
}

bool isBuildSuccess = result.Equals("succeeded", StringComparison.OrdinalIgnoreCase);
Console.WriteLine(isBuildSuccess ? "构建执行成功" : "构建执行失败");

如果需要查询Pipeline下单个Job的执行结果,调用构建时间线接口匹配Job ID即可:

// 替换为从URL解析出的jobId
string targetJobId = "你的目标作业ID";
string getTimelineUrl = $"{org}/{project}/_apis/build/builds/{targetBuildId}/timeline?api-version=7.1";
var timeline = JsonNode.Parse(await httpClient.GetStringAsync(getTimelineUrl));
var targetJob = timeline["records"].AsArray()
    .First(r => r["id"].GetValue<string>().Equals(targetJobId, StringComparison.OrdinalIgnoreCase));
bool isJobSuccess = targetJob["result"].GetValue<string>().Equals("succeeded", StringComparison.OrdinalIgnoreCase);

注意事项

  • 接口路径中的api-version=7.1是通用稳定版本,如果你使用的是本地部署的Azure DevOps Server,可替换为对应版本支持的API版本号。
  • 若你操作的是发布流水线(Release Pipeline),仅需将接口路径中的build替换为release,鉴权逻辑完全一致。
  • 不建议硬编码PAT到代码中,生产环境请用环境变量、密钥保管库等安全方式存储密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.15 16:16:02