【发布时间】:2020-12-01 15:21:47
【问题描述】:
查看az pipelines documentation 似乎无法使用 cli 克隆管道。
我查看了获取 yaml (az pipelines show -name=x > x_orig.yaml),然后尝试更改 json 并从修改后的 yaml 创建管道,但这感觉像是很多工作可能会在下次更新后中断。
有没有办法在不访问 Web UI 的情况下克隆管道?
【问题讨论】:
标签: azure-devops
查看az pipelines documentation 似乎无法使用 cli 克隆管道。
我查看了获取 yaml (az pipelines show -name=x > x_orig.yaml),然后尝试更改 json 并从修改后的 yaml 创建管道,但这感觉像是很多工作可能会在下次更新后中断。
有没有办法在不访问 Web UI 的情况下克隆管道?
【问题讨论】:
标签: azure-devops
目前,确实没有可用的 Azure CLI 可以克隆或导出/导入管道以创建新管道。
我也搜索并尝试了Azure DevOps REST API for Pipelines,但没有找到可用的 API。
理想情况下,Azure CLI“az pipelines create”可以提供一个输入参数,允许用户将现有管道指定为新管道的起点。
如果你的项目真的需要这个功能,我建议你可以直接在“Azure/azure-cli”仓库上报告一个功能请求,要求添加上面提到的参数。这将允许您直接与相应的工程团队互动,并使工程团队更方便地收集和分类您的建议。
【讨论】:
作为一种解决方法,我们可以通过 power shell 脚本克隆构建定义以调用 REST API。
注意:我们需要更改原来的构建定义名称。
REST API
获取构建定义:
GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=6.0
创建构建定义
POST https://dev.azure.com/{organization}/{project}/_apis/build/definitions?api-version=6.0
Power shell 脚本
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$BuildDefinitionInfoURL = "https://dev.azure.com/{org name}/{project name}/_apis/build/definitions/386"
$BuildDefinitionInfo = Invoke-RestMethod -Uri $BuildDefinitionInfoURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
Write-Host $BuildDefinitionInfo.name
$BuildDefinitionInfo.name = $BuildDefinitionInfo.name +" clone"
Write-Host $BuildDefinitionInfo.name
$body = $BuildDefinitionInfo | ConvertTo-Json -Depth 99
$createBuildDefinitionURL = "https://dev.azure.com/{org name}/{project name}/_apis/build/definitions?api-version=6.0"
$response = Invoke-RestMethod -Uri $createBuildDefinitionURL -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST
Write-Host $response.id
结果:
【讨论】: