【问题标题】:How to create a new build or release using the API and YAML如何使用 API 和 YAML 创建新的构建或发布
【发布时间】:2019-02-20 19:24:34
【问题描述】:

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


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

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

我找到了Create your first pipelineApi 5.0 BuildDefinition/Create,但是这些都没有提到将 yaml 定义发布到 api。考虑到 yaml 定义包含所需的大部分信息,我预计请求正文中的项目要少得多。


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

【问题讨论】:

  • 我可能会反过来,在 UI 中创建一个 yaml 构建,除了你得到的其余 api 输出
  • 我不确定你的意思 @4c74356b41 。我的目标是能够自动创建我们的构建和发布,因为我们使用了大量的微服务,而且我已经厌倦了克隆定义和更改相同的变量。如果可以的话,它比在 yaml 文件中替换令牌并将其发布到 azure-devops api 更容易出错并且更耗时。如果我可以轻松地为我的一个构建填写请求的主体,那显然会改变事情。也许我可以使用 api 进行构建?这可能行得通。

标签: azure-devops


【解决方案1】:

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

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

  • 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  

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢 Cece,变量组可能会起作用,但如果将来需要,我也想让它为每个微服务的任务打开。我还必须更改工件名称以使其与我们的发布管道一起使用。
    猜你喜欢
    • 2017-12-13
    • 2020-03-29
    • 1970-01-01
    • 2020-01-07
    • 2018-03-27
    • 2015-07-05
    • 1970-01-01
    • 2023-03-14
    • 2013-06-18
    相关资源
    最近更新 更多