0

我有一个拥有多个项目和存储库的天蓝色组织。每当我在项目的任何存储库中进行一些提交时,都会在与不同项目下的存储库同名的管道下创建一个新版本,并使用 CI/CD 将相同的版本部署到测试环境中。在测试环境中测试相同的内容后,我想在生产环境中自动化部署 100 多个管道(针对我更新的各种不同的存储库)的过程。我对此很陌生,您能否提出一种自动化此过程的方法。

我查看了 azure CLI 并看到在 repo 中创建的合并 id 中的关系显示在创建的新版本下(就像这个版本是使用这个合并图像创建的),不知何故我可以获取那个 id 并为此创建的 repos 管道在特定环境中部署相同。每个管道都有多个版本,因此我想部署在我的合并创建的版本上。

仅供参考,我正在使用 cli 脚本一次更新所有 repos 中的公共值,因此所有 PR 都是使用附加的相同任务创建的。只是提到这一点,因为可能有某种方法可以从使用该任务编号的 PR 中获取合并 ID。

目前我正在尝试使用 gitbash + azure cli 来做到这一点,我对 powershell 持开放态度,或者即使有办法通过创建一个可以处理这个事情的新管道来做到这一点,我也愿意学习。

谢谢!

4

1 回答 1

1

我花了很多时间试图找到完美的 REST 调用,所以这就是我所做的:

  1. 获取https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}?relations=links&api-version=6.0

此休息调用在 JSON 响应中提供与工作项相关的信息。您可以在响应中找到 workItemUpdates 链接。

  1. 再次在此链接上进行 REST 调用,该调用会在此工作项上完成所有可能的更新,其中 value.relations.added.url 在此之下,我们会在 repos 上获得所有更新。在 "%2F" 上拆分匹配 *pullRequest* 的地方,第三部分为我们提供了拉取请求编号。

因此,通过这种方式,我们可以获取与工作项相关的所有 Pr。

  1. 使用 Pr id 命中:GET https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests/{pullRequestId}?api-version=6.0

在 repository.name 下,我得到了 repo 名称,用于:GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}?api-version=4.1

在 value[0].commitId 下,我们得到了最新的 SHA 提交 id,我们需要这个 id 来找到我们编辑创建的版本。

现在继续管道。GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions/{definitionId}?api-version=6.0 这个 rest 调用提供了发布定义信息,我们可以获取最新的release created info from this 这是唯一的缺点,因为我们无法获取该定义的所有版本的信息。在这个响应中,我们可以获取发布 id(lastRelease.id 是路径)

在以下位置使用此版本 ID:GET https://vsrm.dev.azure.com/hmcloud/Appeaser-System/_apis/release/releases/{release id}?api-version=6.0

要获取与发布相关的信息,请在环境中执行循环以获取您希望在其上部署的特定阶段的环境 ID,并最终使用它来部署: 如何通过 API 从 DevOps 部署发布

于 2022-01-27T11:58:30.200 回答