Gitlab:列出所有项目和所有组

时间:2017-07-12 23:09:29

标签: gitlab

使用我的私人令牌在Gitlab中列出所有项目和组的最简单方法是什么。

3 个答案:

答案 0 :(得分:17)

如果只有您的私人令牌可用,则只能使用API​​:

<强>项目

使用以下来请求项目:

curl "https://<host/api/v4/projects?private_token=<your private token>"

这将返回前20个条目。要获得更多信息,您可以添加参数per_page

curl "https://<host/api/v4/projects?private_token=<your private token>&per_page=100"

使用此参数,您可以在20100条目之间进行请求。 https://docs.gitlab.com/ce/api/README.html#pagination

如果你现在想要所有项目,你必须遍历页面,以获得另一个页面添加参数page

curl "https://<host/api/v4/projects?private_token=<your private token>&per_page=100&page=<page_number>"

现在您可能想知道有多少页面。为此,请添加curl参数--head。这不会返回有效负载,而是返回标头。

结果如下:

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 13 Jul 2017 17:43:24 GMT
Content-Type: application/json
Content-Length: 29428
Cache-Control: no-cache
Link: <request link>
Vary: Origin
X-Frame-Options: SAMEORIGIN
X-Next-Page: 2
X-Page: 1
X-Per-Page: 20
X-Prev-Page:
X-Request-Id: 80ecc167-4f3f-4c99-b09d-261e240e7fe9
X-Runtime: 4.117558
X-Total: 312257
X-Total-Pages: 15613
Strict-Transport-Security: max-age=31536000

两个有趣的部分是X-TotalX-Total-Pages,第一个是可用条目的数量,第二个是总页数。

我建议使用python或其他类型的脚本来处理请求并在结尾处连接结果。

如果您想要优化搜索,请参阅此Wiki页面: https://docs.gitlab.com/ce/api/projects.html#projects-api

<强>组

对于群组,只需将projects替换为卷曲中的groupshttps://docs.gitlab.com/ce/api/groups.html#list-groups


更新: 以下是Gitlab API客户端/包装器的正式列表:https://about.gitlab.com/applications/#api-clients
我强烈建议使用其中之一。

答案 1 :(得分:0)

使用python可以轻松列出所有组和项目。下面是可以尝试列出项目和组的代码:

import os
import gitlab

gl = gitlab.Gitlab('http://gitlab_hostname.com', 'your_private_token')
groups = gl.groups.list()
projects = gl.projects.list()
all_projects = gl.projects.list(all=True)
all_groups=gl.groups.list(all=True)
print("All groups are:",all_groups)
length=len(all_projects)
i=0
while i < length:
    project = gl.projects.get(all_projects[i].id)
    print(project)
    i=i+1

答案 2 :(得分:0)

使用python-gitlab模块,我们可以获取其中的所有组和项目。但是,如果您有20个以上的小组或任何小组中有20个项目,请使用分页。

import gitlab
gl = gitlab.Gitlab('https://gitlab.com', private_token='Token')
groups = gl.groups.list()
for each in groups:
    group = gl.groups.get(each, lazy=True)
    project_lst=group.projects.list(as_list=False)  #pagination
    for item in project_lst:
    project_id = gl.projects.get(item.attributes['id'])
        ......................................
        ......................................