azure-pipelines - 克隆 Azure devops 的构建和发布管道
问题描述
我的 BU 有大约 150 个用于单个项目的构建和发布管道。现在我需要为不同的实例创建类似的管道(改变以区分的几个参数),我将这些新代码提交到一个新的分支上。它们是非常相似的任务,但代码可以针对每个分支上的不同功能。因此,为了区分代码(为相同的模块克隆了相同的解决方案,但不同的开发人员致力于不同的功能),我们克隆了新的分支,并更改了代码中的名称和几个参数。因此,重新创建这 150 条管道变得非常繁重。同样,我们有大约 5 个此类组的不同实例,导致大约 750 个或更多管道。有没有办法克隆整个 150 条管道?其次,能够更改前面的参数而不是编辑每个参数并更改参数会很好。同样,需要更改的内容具有很大的一致性,以将其与先前的管道实例区分开来。我在看 CLI 或 YAML 并且已经完全没有想法了......
解决方案
克隆 Azure devops 的构建和发布管道
目前没有这种开箱即用的方式来克隆构建和发布管道。
作为解决方法,我们可以使用 REST API定义 - 创建:
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'
如果您的管道是 YAML 模式,您还可以使用另一种方式来克隆管道:
推荐阅读
- docker - Dockerized spring-boot 服务的实例在 swarm 模式下不断失败。如何发现问题?
- node.js - 为特定模块编写测试时如何使用绝对导入路径
- html - Bootstrap - 单击汉堡图标时导航栏菜单项不可见
- javascript - JavaScript函数不将数组索引返回为未定义
- android - 如何使用 GIF 图片作为 ProgressBar?
- google-calendar-api - 使用谷歌日历的 REST API 显示登录我的网站的用户的日历
- maven - 如何为插件的不同执行提供不同的属性集?
- sql - 如果语句包含 UNION、INTERSECT 或 EXCEPT 运算符(变体),则 ORDER BY 项必须出现在选择列表中
- asp.net-core - 使用参数调用控制器时 Stream 意外结束,并且仅在 IE11 上
- java - 无冲突计算整数数组哈希的最快方法