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

Azure devops 如何使用Azure DevOps REST API列出具有部署作业的YAML管道?,azure-devops,yaml,azure-pipelines,azure-devops-rest-api,azure-pipelines-yaml,Azure Devops,Yaml,Azure Pipelines,Azure Devops Rest Api,Azure Pipelines Yaml,我正在寻找一种方法来列出所有使用该功能(于2020年发布)触发部署的YAML管道“定义” 在前面的示例中,很简单,您只需使用REST API端点列出所有现有的发布定义管道: GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=6.0 我没有发现任何类似的YAML管道 我尝试使用端点(在REST API版本6.0中发布)获取管道信息: GET https://d

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

在前面的示例中,很简单,您只需使用REST API端点列出所有现有的发布定义管道:

GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=6.0
我没有发现任何类似的YAML管道

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

GET https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}?api-version=6.0-preview.1
返回此JSON(已编辑):

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

使用Azure DevOps REST API,是否有方法检索有关YAML管道的更多信息,以了解其是否将参与部署


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

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

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

  • 更新YAML管道的命名约定,以包含指示管道用途的后缀例如:我的管道-发布和我的管道-构建
  • 组织文件夹,以便在管道层次结构中包含生成和发布文件夹
  • 如果您使用这两个选项中的任何一个,您将能够轻松地检测脚本中是否部署了管道

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

    事实上,使用Azure DevOps REST API列出具有部署作业的YAML管道并没有现成的方法

    但我们可以使用REST API:

    需要注意的一点是,响应体不是标准的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解析器(并使其保持最新状态),以满足像列出部署作业这样简单的需求。YAML模板的使用使这比您预期的要困难。至少,如果Azure DevOps使用的YAML解析器可以公开使用,这不会有多大问题,但事实似乎并非如此。在我看来,这似乎是该产品应该具备的一个基本功能:正如我在问题中所解释的,使用经典管道很容易。为什么有这样的“现代”特征会如此困难?
    GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}/yaml?api-version=6.1-preview.1
    
    $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