【问题标题】:How to list YAML pipelines with deployment jobs using Azure DevOps REST API?如何使用 Azure DevOps REST API 列出具有部署作业的 YAML 管道?
【发布时间】:2021-02-15 14:27:24
【问题描述】:

我正在寻找一种方法来列出所有使用 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 文件并对其进行解析以获取部署作业参考不是一种选择。

【问题讨论】:

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


【解决方案1】:

很遗憾,不,您不能使用任何可用的 API 来检索与发布关联的 YAML 管道。

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

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

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

【讨论】:

    【解决方案2】:

    如何使用 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 文件的测试结果是:

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

    【讨论】:

    • 感谢您的回答。我不确定我(或其他任何人)是否想要编写一个 YAML 解析器(并使其保持最新)能够满足像列出部署工作一样简单的需求。 YAML 模板的使用使这比你想象的更难。至少,如果 Azure DevOps 使用的 YAML 解析器是公开可用的,那将不是什么大问题,但似乎并非如此。在我看来,这似乎是产品应该具备的基本功能:正如我在问题中所解释的,使用经典管道很容易。为什么这么“现代”的功能会这么难?
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 2021-02-27
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多