簡體   English   中英

在 Azure DevOps 中獲取兩個構建之間的變化

[英]Get changes between two builds in Azure DevOps

我嘗試使用此代碼獲取兩個構建之間的更改:

var changes1 = buildClient.GetChangesBetweenBuildsAsync("PipelineTest", 2, 3).Result;

這不返回任何元素。 但是,當我嘗試通過構建 3 的 Web 門戶獲取更改時,我得到了更改:

在此處輸入圖像描述

我也試過build.GetBuildChangesAsync("PipelineTest", 3)也沒有給我任何結果。

我必須注意到,管道存儲在Repo1中,而更改是在Repo2上完成的。

我怎樣才能獲得兩個構建之間的所有更改,而不管它們已提交到存儲庫中?

我正在使用TeamFoundationServer.Client 16.170.0

不支持在具有多個源存儲庫的管道的構建之間獲取工作項。

您可以提出允許您直接與產品組交互的請求

更多詳情請參考開發者社區

我們已經發現 Azure Devops 尚不支持在多存儲庫結構上的兩個構建之間獲取更改或工作項。 不過,有一個功能要求

為了解決這個問題,我檢查了圖形界面如何檢索信息,並注意到有一些未記錄的函數稱為HierarchyQuery 經過一些試驗和錯誤后,我讓該功能在我的應用程序中工作。 不過,我們需要在這里提供一些信息。

第一個當然是一些身份驗證 - 在我的示例中,我使用私有訪問令牌。 這與驗證“正常”API 相同。 這里的第二點是我們應該在 POST 請求中使用的一些數據。 這主要包含我們想要更改的 repo ( "artifactAlias":"Repo2" ) 以及我們想要檢查的 build-id ( "currentRunId":3 )。 由於我們有多個 repos,我們需要循環它們,我在這里省略了,你明白了,不是嗎?

最后,我們需要解析響應以獲得 workitemid。 從那里我們可以再次使用普通 API 來查詢關聯的項目。

但是請注意,這是完全沒有記錄的,也沒有公共 API。

string workItemId;
var json =  "{\"contributionIds\":[\"ms.vss-traceability-web.traceability-workitems-data-provider\"],\"dataProviderContext\":{\"properties\":{\"artifactAlias\":\"Repo2\",\"currentRunId\":3,\"useSnapshot\":true,\"sourcePage\":{\"url\":\"https://dev.azure.com/myorganization/PipelineTest/_traceability/runview/workitems?currentRunId=3\",\"routeId\":\"ms.vss-traceability-web.traceability-run-workitems-hub-default-route\",\"routeValues\":{\"project\":\"PipelineTest\",\"controller\":\"ContributedPage\",\"action\":\"Execute\",\"serviceHost\":\"MyServiceHost\"}}}}}";
var content = new StringContent(json, Encoding.UTF8, "application/json");

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.ParseAdd("application/json;api-version=5.0-preview.1;excludeUrls=true;enumsAsNumbers=true;msDateFormat=true;noArrayWrap=true");
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                    Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", myPAT))));    
    
    using (HttpResponseMessage response = client.PostAsync("https://dev.azure.com/myorganization/_apis/Contribution/HierarchyQuery", content).Result)
    {
        response.EnsureSuccessStatusCode();
        string responseBody = response.Content.ReadAsStringAsync().Result;
        dynamic r = JsonConvert.DeserializeObject(responseBody);
        workItemId = (string)r["dataProviders"]["ms.vss-traceability-web.traceability-workitems-data-provider"]["data"][0]["id"];
    }
}

var connection = new VssConnection(clientBaseAddress, new VssBasicCredential(string.Empty, pat));
var wiclient = connection.GetClient<WorkItemTrackingHttpClient>();
var workItem = wiclient.GetWorkItemAsync(projectName, Int32.Parse(workItemId)).Result;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM