Azure devops 如何使用API和YAML创建新的构建或发布

Azure devops 如何使用API和YAML创建新的构建或发布,azure-devops,Azure Devops,我只是在这里寻找方向,因为api可能已经这样做了,我误解了/找不到正确的资源 我想做的是,当我为azure devops api提供每个阶段所需的所有yaml文件时,能够调用它来为我创建一个新的构建定义 我希望创建一个端点,它将接收一些基本信息来创建构建/发布定义,然后是一组yaml文件来创建任务 我发现了,但是它们都没有提到在api中发布yaml定义。考虑到yaml定义包含了所需的大部分信息,我希望请求主体中的项目要少得多 api支持这一点吗?它会支持这个吗?是的,你是对的,你可以使用ap

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


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

我希望创建一个端点,它将接收一些基本信息来创建构建/发布定义,然后是一组yaml文件来创建任务

我发现了,但是它们都没有提到在api中发布yaml定义。考虑到yaml定义包含了所需的大部分信息,我希望请求主体中的项目要少得多



api支持这一点吗?它会支持这个吗?

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


如果您只需要修改变量,您可以使用来存储值,然后您可以使用获取变量组并修改变量值。

是的,您是对的,您可以使用api对构建进行获取,并更改变量,这应该可以工作


如果您只需要修改变量,您可以使用来存储值,然后您可以使用获取变量组并修改变量值。

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

因此,如果您想要编辑流程,您必须编辑现有的yaml文件。如果要创建/克隆现有生成定义,可以尝试创建/克隆yaml文件,并向流程成员发布请求()

  • yamlFilename=存储库中yaml文件的路径
  • 类型=2
下面是使用yaml克隆生成定义的powershell示例:

$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  

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

因此,如果您想要编辑流程,您必须编辑现有的yaml文件。如果要创建/克隆现有生成定义,可以尝试创建/克隆yaml文件,并向流程成员发布请求()

  • yamlFilename=存储库中yaml文件的路径
  • 类型=2
下面是使用yaml克隆生成定义的powershell示例:

$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  

我可能会反过来,在UI中创建一个yaml构建,除了您获得的rest api输出之外,我不确定@4c74356b41是什么意思。我的目标是能够自动化构建和发布的创建,因为我们使用了很多微服务,而且我已经厌倦了克隆定义和更改相同的变量。这比在yaml文件中替换令牌并将其发布到azure devops api(如果可以的话)更容易出错,也更耗时。如果我可以很容易地为我的构建中的一个构建填充请求主体,那么它显然会改变一些事情。也许我可以使用api进行构建?这可能行得通。我可能会反过来,在UI中创建一个yaml构建,除了您获得的rest api输出之外,我不确定@4c74356b41是什么意思。我的目标是能够自动化构建和发布的创建,因为我们使用了很多微服务,而且我已经厌倦了克隆定义和更改相同的变量。这比在yaml文件中替换令牌并将其发布到azure devops api(如果可以的话)更容易出错,也更耗时。如果我可以很容易地为我的构建中的一个构建填充请求主体,那么它显然会改变一些事情。也许我可以使用api进行构建?这可能行得通。谢谢Cece,变量组可能行得通,但如果将来需要的话,我还想让它为每个微服务的任务打开。我还必须更改工件名称,以使其与我们的发布管道一起工作。谢谢Cece,变量组可能会工作,但如果将来需要,我还想为每个微服务的任务保留它。我还必须更改工件名称,以使其与我们的发布管道一起工作。