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

问题描述 投票:0回答:2

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

azure-devops azure-pipelines
2个回答
3
投票

没有内置功能,我编写了一个示例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 文件和存储库名称来获取管道名称:

enter image description here


0
投票

(现在)使用 Azure CLI 也可以实现同样的效果。以下是

az pipelines
命令,它与
jq
结合列出了与存储库关联的所有管道的名称:

az pipelines list --organization <your_org_url> --project <project_in_your_org> --repository <repository_in_your_project> | jq .[].name

该命令需要 Azure CLI 安装中的 azure-devops 扩展,运行该命令后,该扩展应该会自动安装(以防尚未安装)。

© www.soinside.com 2019 - 2024. All rights reserved.