首页 > 解决方案 > 如何获取 GitLab 组(python-gitlab)中所有存储库的项目 ID?

问题描述

我想在我的协作 GitLab 组中的所有存储库中自动化一些流程,这(至少从 GitLab API v4 开始)需要项目 ID 而不是名称。

python-gitlab库是否具有获取给定组的所有项目 ID 的方法?

标签: pythongitlab

解决方案


原来确实有这样的方法!

我编写了一个脚本,它将获取所有项目的列表并提取它们的 ID:

#### get_project_ids.py ####
# gets all project ids for a gitlab group
# assumes GitLab 'private_token' is set to env. variable called $GITLAB_TOKEN

import gitlab, os

# authenticate
gl = gitlab.Gitlab('https://gitlab.com/', private_token=os.environ['GITLAB_TOKEN'])

# set gitlab group id
group_id = 55555
group = gl.groups.get(group_id, lazy=True)

#get all projects
projects = group.projects.list(include_subgroups=True, all=True)

#get all project ids
project_ids = []
for project in projects:
    project_ids.append((project.path_with_namespace, project.id))
    
print(project_ids)

如果您随后需要对这些存储库进行操作,您可以使用该requests库通过 python 进行 http 调用,例如:

import requests

# unprotect master branch for all projects
for pid in project_ids:
    r = requests.request('DELETE', 'https://gitlab.com/api/v4/projects/{}/protected_branches/master'.format(pid[1]), headers = {'PRIVATE-TOKEN' : token})

推荐阅读