如何使用 Azure DevOps REST API 列出带有部署作业的 YAML 管道?

时间:2021-02-15 14:27:24

标签: azure-devops yaml azure-pipelines azure-devops-rest-api azure-pipelines-yaml

我正在寻找一种方法来列出使用 deployment job 功能(于 2020 年于 GA 发布)触发部署的所有 YAML 管道“定义”。

在之前的 Classic Release pipeline 中,这很简单,您只需使用 release REST API 端点列出所有现有的发布定义管道:

GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=6.0

我没有发现任何与 YAML 管道类似的东西。

我尝试使用 pipelines 端点(在 REST API 6.0 版中发布)来获取管道信息:

GET https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}?api-version=6.0-preview.1

返回此 JSON(已编辑):

    {
        "_links": {
            "self": {
                "href": "https://dev.azure.com/myorganization/19d42339-19ab-0000-aa1c-3f8e53300000/_apis/pipelines/1813?revision=2"
            },
            "web": {
                "href": "https://dev.azure.com/myorganization/19d42339-19ab-0000-aa1c-3f8e53300000/_build/definition?definitionId=1813"
            }
        },
        "configuration": {
            "path": "azure-pipelines/CI.yml",
            "repository": {
                "id": "a5e1ea98-1181-40a0-932f-6fcbdb92b1a0",
                "type": "azureReposGit"
            },
            "type": "yaml"
        },
        "url": "https://dev.azure.com/myorganization/19d42339-19ab-0000-aa1c-3f8e53300000/_apis/pipelines/1813?revision=2",
        "id": 1813,
        "revision": 2,
        "name": "My YAML Pipeline definition",
        "folder": "\\"
    }

您获得了用于创建此管道的存储库和 YAML 文件,但没有关于内容的信息。无法知道此管道用于部署。

使用 Azure DevOps REST API,有没有办法检索有关 YAML 管道的更多信息,以便能够知道它是否会参与部署?

PS:下载 YAML 文件并解析它们以获取部署作业引用不是一种选择。

2 个答案:

答案 0 :(得分:1)

不幸的是,不能,您不能使用任何可用的 API 来检索与发布相关的 YAML 管道。

在这方面我能提供的最好建议是做两件事之一,以便能够轻松检测管道是否同时构建和部署,或者只是构建:

  1. 更新您的 YAML 管道的命名约定,以包含一个表示管道用途的后缀。 例如:我的管道 - 发布和我的管道 - 构建
  2. 组织您的文件夹以在您的管道层次结构中包含一个 Build 和 Release 文件夹。

如果您使用这些选项中的任何一个,您将能够轻松检测管道是否正在脚本中部署。

答案 1 :(得分:0)

<块引用>

如何使用 Azure DevOps REST API 列出带有部署作业的 YAML 管道?

事实上,没有这样一种开箱即用的方式来使用 Azure DevOps REST API 列出带有部署作业的 YAML 管道。

但我们可以使用 REST API Yaml - Get

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}/yaml?api-version=6.1-preview.1

需要注意的一点是,响应体不是标准的 YAML 格式,我们可以简单地对其进行转换:

$outfile = "D:\YAMLTempFolder\test.yaml"

$connectionToken="Your PAT Here"

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::  

ASCII.GetBytes(":$($connectionToken)"))

$YAMLURL = "GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}/yaml?api-version=6.1-preview.1"   

$YAMLInfo = Invoke-RestMethod -Uri $YAMLURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get 

$yaml = $YAMLInfo.yaml

echo $yaml.Replace("...","") > $outfile

我的YAML文件的测试结果是:

enter image description here

现在,我们只需要确定文件是否包含关键字-deployment