克隆 Azure DevOps 的构建和发布管道

时间:2021-05-13 14:01:23

标签: azure-pipelines

我的 BU 有大约 150 个用于单个项目的构建和发布管道。现在我需要为不同的实例创建类似的管道(几个改变以区分的参数),并且我在新分支上提交了这些新代码。它们是非常相同的任务,但代码可以针对每个分支上的不同功能。因此,为了区分代码(为同一模块克隆了相同的解决方案,但不同的开发人员正在处理不同的功能),我们克隆了新分支,并更改了代码中的名称和参数。 因此,重新创建这 150 条管道变得非常繁重。同样,我们有大约 5 个此类组的不同实例,导致大约 750 个或更多管道。 是否有克隆整个 150 条管道的捷径?其次,能够在前面更改参数而不是编辑每个参数并更改参数会很好。同样,需要更改的内容具有很大的一致性,以将其与之前的管道实例区分开来。 我正在查看 CLI 或 YAML,但完全没有想法......

1 个答案:

答案 0 :(得分:0)

<块引用>

克隆 Azure DevOps 的构建和发布管道

目前没有这种开箱即用的方式来克隆构建和发布管道。

作为解决方法,我们可以使用 REST API Definitions - Create

POST https://dev.azure.com/{organization}/{project}/_apis/build/definitions?api-version=5.0

但是我们需要在请求正文中提供太多信息,这将是一个大项目并且容易出错。这也是文档没有在那里提供示例请求正文的原因。

为了解决这个问题,我们通常会使用 REST API Definitions - Get 从模板管道中获取响应正文:

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0

然后我们只需要通过修改Response Body来更新相应的属性即可。

现在,我们获得了新管道的新请求正文,我们可以将其与 REST API Definitions - Create 结合使用以创建新管道。

例如:

$uri = 'https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=6.0'

$result = Invoke-RestMethod -Method Get -Uri $uri -UseDefaultCredentials
$result.path = '\NewFolder\Location'
$result.name = "$result.name+clone"

$body = $result | ConvertTo-Json -Depth 10

Invoke-RestMethod -Method POST -uri 'https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=6.0' -UseDefaultCredentials -Body $body -ContentType 'application/json'

您可以查看 this threadthis thread 了解更多详情。

如果您的管道是 YAML 模式,您还可以使用另一种方式来克隆管道:

Bulk import YAML pipelines in Azure DevOps