Azure Devops 使用存储库名称获取 repositoryId
Azure Devops Get a repositoryId by using repository name
我正在编写一个 BASH 脚本,它在其中创建一个 azure 存储库,然后推送代码。 post 这一步将继续并通过 Azure 存储库中存在的 azure-pipeline.yaml
文件创建一个 azure 管道。
在这一步,我们需要传递存储库 ID 以创建管道,但这里的问题是我不能将其保留为用户输入,因为它将在脚本本身中创建,现在我是对此感到震惊。
有什么方法可以直接在脚本中从新创建的 repo 中获取 repo id 吗?
https://dev.azure.com/{{organization}}/{{project}}/_apis/pipelines?api-version=6.0-preview.1
{
"folder": "Folder-Name",
"name": "Pipeline-Name",
"configuration": {
"type": "yaml",
"path": "azure-pipelines.yml",
"repository": {
"id": "Repo-ID",
"name": "Repo-Name",
"type": "azureReposGit"
}
}
}
是的,当您创建存储库时(使用 Repositories - Create api),您会在响应中得到存储库 ID:
{
"id": "5febef5a-833d-4e14-b9c0-14cb638f91e6",
"name": "AnotherRepository",
"url": "https://dev.azure.com/fabrikam/_apis/git/repositories/5febef5a-833d-4e14-b9c0-14cb638f91e6",
"project": {
"id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
"name": "Fabrikam-Fiber-Git",
"url": "https://dev.azure.com/fabrikam/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
"state": "wellFormed"
},
"remoteUrl": "https://dev.azure.com/fabrikam/Fabrikam-Fiber-Git/_git/AnotherRepository"
}
所以只需将其保存在变量中并在创建管道中使用api。
这可以通过将输出作为变量输出到另一个文件来完成(正如@Shayki Abramczyk 所建议的),然后借助以下命令我们可以在脚本文件中调用 ID 变量
$ jq -r '.id' Repooutput.txt
dad04f6d-4e06-4420-b0bc-cb2dcfee2dcf
如果您想使用 Python 获取它:
import azure.devops.connection as connection
import msrest.authentication as basic_authentication
PAT = "***" # personal access token
AZURE_DEVOPS_URI = ""
PROJECT = ""
def get_repository_id_by_repo_name(repo_name):
credentials = basic_authentication.BasicAuthentication("", PAT)
connection_to_clients = connection.Connection(base_url=AZURE_DEVOPS_URI , creds=credentials)
clients = connection_to_clients.clients_v5_1
git_client = clients.get_git_client()
repositories = git_client.get_repositories(project=PROJECT)
for repo in repositories:
repository_name = str(repo.name)
if repository_name == repo_name:
return repo.id
return "Repository not found"
我正在编写一个 BASH 脚本,它在其中创建一个 azure 存储库,然后推送代码。 post 这一步将继续并通过 Azure 存储库中存在的 azure-pipeline.yaml
文件创建一个 azure 管道。
在这一步,我们需要传递存储库 ID 以创建管道,但这里的问题是我不能将其保留为用户输入,因为它将在脚本本身中创建,现在我是对此感到震惊。
有什么方法可以直接在脚本中从新创建的 repo 中获取 repo id 吗?
https://dev.azure.com/{{organization}}/{{project}}/_apis/pipelines?api-version=6.0-preview.1
{
"folder": "Folder-Name",
"name": "Pipeline-Name",
"configuration": {
"type": "yaml",
"path": "azure-pipelines.yml",
"repository": {
"id": "Repo-ID",
"name": "Repo-Name",
"type": "azureReposGit"
}
}
}
是的,当您创建存储库时(使用 Repositories - Create api),您会在响应中得到存储库 ID:
{
"id": "5febef5a-833d-4e14-b9c0-14cb638f91e6",
"name": "AnotherRepository",
"url": "https://dev.azure.com/fabrikam/_apis/git/repositories/5febef5a-833d-4e14-b9c0-14cb638f91e6",
"project": {
"id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
"name": "Fabrikam-Fiber-Git",
"url": "https://dev.azure.com/fabrikam/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
"state": "wellFormed"
},
"remoteUrl": "https://dev.azure.com/fabrikam/Fabrikam-Fiber-Git/_git/AnotherRepository"
}
所以只需将其保存在变量中并在创建管道中使用api。
这可以通过将输出作为变量输出到另一个文件来完成(正如@Shayki Abramczyk 所建议的),然后借助以下命令我们可以在脚本文件中调用 ID 变量
$ jq -r '.id' Repooutput.txt
dad04f6d-4e06-4420-b0bc-cb2dcfee2dcf
如果您想使用 Python 获取它:
import azure.devops.connection as connection
import msrest.authentication as basic_authentication
PAT = "***" # personal access token
AZURE_DEVOPS_URI = ""
PROJECT = ""
def get_repository_id_by_repo_name(repo_name):
credentials = basic_authentication.BasicAuthentication("", PAT)
connection_to_clients = connection.Connection(base_url=AZURE_DEVOPS_URI , creds=credentials)
clients = connection_to_clients.clients_v5_1
git_client = clients.get_git_client()
repositories = git_client.get_repositories(project=PROJECT)
for repo in repositories:
repository_name = str(repo.name)
if repository_name == repo_name:
return repo.id
return "Repository not found"