我正在寻找一种方法来列出使用 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 文件并解析它们以获取部署作业引用不是一种选择。
答案 0 :(得分:1)
不幸的是,不能,您不能使用任何可用的 API 来检索与发布相关的 YAML 管道。
在这方面我能提供的最好建议是做两件事之一,以便能够轻松检测管道是否同时构建和部署,或者只是构建:
如果您使用这些选项中的任何一个,您将能够轻松检测管道是否正在脚本中部署。
答案 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文件的测试结果是:
现在,我们只需要确定文件是否包含关键字-deployment
。