如何获取与排队的 CI 关联的搁置集?

How to get the shelveset associated to queued CIs?

想象一下:

您有一个 Azure DevOps 2019 服务器和一个 XAML 构建定义。

您对构建定义进行了一些签入排队。第一位正在办理登机手续,其余正在排队等候

如何使用 REST API 获取排队构建的搁置集?

很容易获得与 InProgress 构建关联的搁置集,因为存在 BuildID。我使用它来获取有关使用 API 构建的更多详细信息,例如:“Builds/33217/Details”。 从那里开始,我可以上架了。

如果构建排队(或未启动),则构建详细信息 API returns:

{
"value": [],
"count": 0
}

...因此我无法获得上架集。

我的印象是升级到 DevOps 2019 会修改 API,这样人们也可以轻松地从 XAML 构建定义中获取排队的搁置集。但是,我不确定我在这里缺少什么。我应该使用另一个 API 吗?

简答参考 Microsoft backlogged/doesn't exist/no easy way explained in option 1, but I used option 2, and option 3, I hope this helps you,我有点挣扎!

  1. Underlying issue is that you're querying from 1) Bottom to Top in DevOps build Hierarchy/Object Model, and you need to 2) Associate the shelveSets versioned changeSet & then to the build.

2. TLDR, I simply followed a practice of prefixing/Tags from my shelveSets allowing me to custom query the build as listed in option 3. This allowed me to simplify it a good bit in the REST API Query tagFilters={tagFilters} for e.g. ShelveSetBuildTag-....

 // now modify you REST API filter `ShelveSetBuildTag-....` 
 GET https://dev.azure.com/{organization}/{project}/_apis/build/builds?definitions={definitions}&queues={queues}&buildNumber={buildNumber}
  &tagFilters={tagFilters}&buildIds={buildIds}&repositoryId={repositoryId}&repositoryType={repositoryType}&api-version=6.0

选项 1: 没有例子,MS 构建文档对我来说很清楚not helpful 但是它被列为可能,我 放弃并采取了不同的路线 ,下面..


选项 2:

因为 shelveSet 未版本化的 Azure DevOps 根据其 ER/DB Design I had to get the associated shelveSets via ChangeSets/or WorkItems in a build.[=73= 使用版本化 changeSets ]

首先,我找到了一篇很好的文章,可以帮助我理解 difference between two key items, changeSet vs shelveSet Azure DevOpsbuild 的关系。 changeSet 将允许你 find associated shelvesets 来构建,查询它并得到 DimChangeset,我怀疑你必须在几个步骤数。

picture below is associated with the following dimension tables:

  • DimBuild
  • DimChangeset
  • DimPerson
  • DimTeamProject

恕我直言,版本控制允许您获取 changeset associated with a build,然后您可以获得进入该变更集的搁置集


第一步:得到changetSets for a ShelveSet

GET https://dev.azure.com/fabrikam/_apis/tfvc/shelvesets/changes?shelvesetId=My first shelveset;d6245f20-2af8-44f4-9451-8107cb2767db&api-version=6.0

第 2 步:获取

GET the changes in a build https://{instance}/DefaultCollection/{project}/_apis/build/builds/{buildId}/changes?api-version={version}

第 3 步:我 manually join 我的中间件中的响应


选项 3:

关注 practice of tagging 你的 shelveSets

然后,您在构建查询中使用标签文件管理器进行查询:tagFilters={tagFilters}

使用您的搁置集中的标签并从您的构建列表中过滤 tagFilters={tagFilters},当然这假设您设置了标签

// ``tagFilters={tagFilters}``for your shelveset assuming you set those up
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds?definitions={definitions}&queues={queues}&buildNumber={buildNumber}&minTime={minTime}&maxTime={maxTime}&requestedFor={requestedFor}&reasonFilter={reasonFilter}&statusFilter={statusFilter}&resultFilter={resultFilter}&tagFilters={tagFilters}&properties={properties}&$top={$top}&continuationToken={continuationToken}&maxBuildsPerDefinition={maxBuildsPerDefinition}&deletedFilter={deletedFilter}&queryOrder={queryOrder}&branchName={branchName}&buildIds={buildIds}&repositoryId={repositoryId}&repositoryType={repositoryType}&api-version=6.0