【问题标题】:Get changes between two builds in Azure DevOps获取 Azure DevOps 中两个版本之间的更改
【发布时间】:2021-10-15 08:56:16
【问题描述】:

我尝试使用此代码获取两个构建之间的更改:

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

这不返回任何元素。但是,当我尝试通过构建 3 的网络门户获取更改时,我得到了更改:

我也试过build.GetBuildChangesAsync("PipelineTest", 3),但也没有结果。

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

如何获取两个构建之间的所有更改,而不管它们已提交到存储库中?

我正在使用TeamFoundationServer.Client16.170.0

【问题讨论】:

  • 您将 buildId - fromBuildIdtoBuildId 作为 URL 的一部分传递并获取更改集合 (Change[]) 作为响应。请参考Get Changes Between Builds
  • @HarshithaVeeramalla-MT 已经尝试过了。不返回任何元素。这适用于changes- 以及workitems-端点。
  • 你在使用 git Repo 吗?
  • @HarshithaVeeramalla-MT 是的,一个 azure-git-repo。

标签: c# azure-devops azure-pipelines


【解决方案1】:

不支持在具有多个源存储库的管道的构建之间获取工作项。

您可以提出request ,让您可以直接与产品组互动。

更多详情请参考Developer Community

【讨论】:

  • 到目前为止我已经这样做了,但无济于事。
【解决方案2】:

我们已经发现,Azure Devops 尚不支持在多存储库结构上的两个构建之间获取更改或工作项。不过,有一个feature-request

为了解决这个问题,我检查了图形界面如何检索信息并注意到有一些未记录的函数称为HierarchyQuery。经过一些试验和错误后,我让该功能在我的应用程序中工作。不过,我们需要在此处提供一些信息。

首先当然是一些身份验证 - 在我的示例中,我使用私有访问令牌。这与验证“普通”API 相同。这里的第二点是我们应该在 POST 请求中使用的一些数据。这主要包含我们想要更改的 repo ("artifactAlias":"Repo2") 以及我们想要检查的 build-id ("currentRunId":3)。由于我们有多个 repos,我们需要循环它们,我在这里省略了,你明白了吧?

最后,我们需要解析响应以获取工作项。从那里我们可以再次使用普通 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;

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2021-11-11
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多