对于我正在工作的一个项目,我必须从Azure DevOps WorkItem ID中获得拉取请求和存储库。我使用的是Microsoft.TeamFoundationServer.Client NuGet-Package。
现在我还希望能够检查构建管道是否成功运行,然后再进行进一步的步骤。
我自己想了想,却找不到一篇关于如何做到这一点的文章,所以我想自己问这个问题。
我已经有了:
- WorkItem对象 GitRepository对象PullRequest对象
And I want:
- 特定Pull Request/Commit的某种形式的管道对象
我希望有一种方法可以做到这一点。
感谢任何帮助或参考。谢谢!
我正在工作,我必须得到一个拉请求和存储库从一个Azure DevOps工作项ID。
对于与工作项相关的pull request,我可以为你写一个c#代码。但是对于存储库,我认为在DevOps概念中存储库本身和工作项之间没有关系(链接提交和工作项是可能的)。
现在我还希望能够检查构建管道是否运行
您的意思是您想要与拉取请求相关的管道运行状态?我检查了sdk定义,没有这样的定义,也没有在REST API。一个可能的解决方案是遵循f12来捕获API以获得构建管道运行id和它的状态。
只是一个演示:
using System;
using System.Threading.Tasks;
using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
namespace GetPipelineResults
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
string url_string = "https://dev.azure.com/xxx/";
string personalAccessToken = "xxx";
Uri orgUrl = new Uri(url_string);
string project = "xxx";
int workitemId = 122;
var workitem = GetPullRequestAndRepositoryFromWorkItemId(orgUrl,personalAccessToken,workitemId);
var pullRequestUrl = workitem.Result.Relations[0].Url.ToString();
var pullRequestUrl2 = pullRequestUrl.Substring(pullRequestUrl.LastIndexOf('/') + 1);
string[] pullRequestUrl2Array = pullRequestUrl2.Split("%2F");
string pullRequestIdString = pullRequestUrl2Array[pullRequestUrl2Array.Length - 1];
Console.WriteLine(pullRequestIdString);
}
//Get Pull request from work item id
public static async Task<WorkItem> GetPullRequestAndRepositoryFromWorkItemId(Uri orgUrl, string personalAccessToken, int workItemId)
{
VssConnection connection = new VssConnection(orgUrl, new VssBasicCredential(string.Empty, personalAccessToken));
WorkItemTrackingHttpClient workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>();
WorkItemExpand workItemExpand = WorkItemExpand.All;
var workItem = workItemTrackingHttpClient.GetWorkItemAsync(workItemId, expand: workItemExpand).Result;
return workItem;
}
}
}