繁体   English   中英

如何从给定的 yaml 文件中找到 Azure DevOps 中的关联管道?

[英]How to find the associated pipeline in Azure DevOps from a given yaml file?

我在 Azure DevOps 中有很多管道。 我的代码存储在 Azure DevOps git 存储库中。 我知道 yaml 文件的路径,这是我的管道之一的定义。 不幸的是,管道的命名约定并不总是理想的,所以我不能轻易找到它与哪个管道相关联。 有什么快速的方法可以找到吗? 不希望单独检查每个管道。

没有内置功能,我编写了一个示例 python 代码来满足您的要求:

import requests

orgname = "<Your Organization Name>"
projectname = "<Your Project Name>"
yamlname = "<Your YAML file name>"
reponame = "<Your Repo Name>"

PAT = "<Your Personal Access Token>"

url_repo = "https://dev.azure.com/"+orgname+"/"+projectname+"/_apis/git/repositories/"+reponame+"?api-version=4.1"

payload_repo={}
headers_repo = {
  'Authorization': 'Basic '+PAT
}

response_repo = requests.request("GET", url_repo, headers=headers_repo, data=payload_repo)
data_repo = response_repo.json()
repoid = data_repo.get('id')

url_pipelines = "https://dev.azure.com/"+orgname+"/"+projectname+"/_apis/pipelines?api-version=6.0-preview.1"

payload_pipelines={}
headers_pipelines = {
  'Authorization': 'Basic '+PAT  
}

response_pipelines = requests.request("GET", url_pipelines, headers=headers_pipelines, data=payload_pipelines)
data_pipelines = response_pipelines.json()
counter_pipelines = str(data_pipelines.get('count'))


counter = 0

for f in data_pipelines.get('value'):
    counter = counter + 1
    url_pipeline = f.get('url')
    id_pipeline = f.get('id')
    pipeline_name_current = f.get('name')
    url_pipeline = "https://dev.azure.com/"+orgname+"/"+projectname+"/_apis/pipelines/"+str(id_pipeline)+"?revision=1"

    payload_pe={}
    headers_pe = {
    'Authorization': 'Basic '+PAT
    }

    response_pe = requests.request("GET", url_pipeline, headers=headers_pe, data=payload_pe)
    data_pe = response_pe.json()
    if (data_pe.get('configuration').get('type') == 'yaml') and (data_pe.get('configuration').get('repository') != None):
        #
        current_yamlname = data_pe.get('configuration').get('path')
        current_pipelinename = data_pe.get('name')
        current_repoid = data_pe.get('configuration').get('repository').get('id')
        if (current_yamlname == yamlname) and (current_repoid==repoid):
            print(data_pe.get('name'))
    elif data_pe.get('configuration').get('repository'):
        print("This is not a DevOps Repository")
    else:
        #No YAML
        pass
print(counter)

我可以通过提供 YAML 文件和 repo 名称来获取管道名称:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM