我在 Azure DevOps 中有很多管道。 我的代码存储在 Azure DevOps git 存储库中。 我知道 yaml 文件的路径,它是我的管道之一的定义。 不幸的是,管道的命名约定并不总是理想的,因此我无法轻松找到与它关联的which管道。 有什么快速的方法可以找到它吗? 单独检查每个管道是不可取的。
没有内置功能,我编写了一个示例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 文件和存储库名称来获取管道名称:
(现在)使用 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 扩展,运行该命令后,该扩展应该会自动安装(以防尚未安装)。