如何使用API​​和YAML创建新的版本或发行版

时间:2019-02-20 08:43:05

标签: azure-devops

我只是在这里寻找方向,因为可能是api已经做到了,我误会了/找不到正确的资源。


我想做的是,当我为每个阶段提供所有必需的yaml文件时,能够调用azure-devops api为我创建一个新的构建定义。

我希望创建一个端点,该端点将吸收一些基本信息来创建构建/发布定义,然后收集yaml文件的集合来创建任务。

我找到了Create your first pipelineApi 5.0 BuildDefinition/Create,但是这些都没有提到在api上发布Yaml定义。考虑到yaml定义包含所需的大多数信息,我期望请求正文中的项目更少。


api是否支持此功能?它会支持吗?

2 个答案:

答案 0 :(得分:1)

是的,是的,您可以使用api进行构建,并更改变量,它应该可以工作。

如果仅需要修改变量,则可以使用variable group存储值,然后可以使用Variablegroups api获取变量组并修改变量值。

答案 1 :(得分:1)

尚无yaml的Rest Api文档,但如果尝试获取现有的yaml定义,您将遇到下一个示例:

enter image description here

因此,如果要编辑过程,则必须编辑现有的Yaml文件。如果要创建/克隆现有的构建定义,则可以尝试创建/克隆yaml文件,并使用流程成员发布请求(Definitions - Create):

  • yamlFilename =存储库中yaml文件的路径
  • 类型= 2

此powershell示例使用yaml克隆构建定义:

$pat = '{personal access token}'
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$pat"))

$uri = 'https://dev.azure.com/{organization}/{team_project}/_apis/build/definitions/{buil_id}?api-version=5.0'

$result = Invoke-RestMethod -Method Get -Uri $uri -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -ErrorAction Stop

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

$existingyaml = '"yamlFilename":  "{path to yaml for existing buildef}"'
$newyaml = '"yamlFilename":  "{path to new yaml}"'
$buildname = '"name":  "{existing build name}"'
$newbuildname = '"name":  "{new build name}"'
$body = $body.Replace($existingyaml, $newyaml)
$body = $body.Replace($buildname, $newbuildname)


$Uri = "https://dev.azure.com/{organization}/{team_project}/_apis/build/definitions?api-version=5.0"

$newBuildDef = Invoke-RestMethod -Uri $Uri -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Post -Body $body -ContentType "application/json" -ErrorAction Stop