使用我的私人令牌在Gitlab中列出所有项目和组的最简单方法是什么。
答案 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"
使用此参数,您可以在20
和100
条目之间进行请求。 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-Total
和X-Total-Pages
,第一个是可用条目的数量,第二个是总页数。
我建议使用python或其他类型的脚本来处理请求并在结尾处连接结果。
如果您想要优化搜索,请参阅此Wiki页面: https://docs.gitlab.com/ce/api/projects.html#projects-api
<强>组强>
对于群组,只需将projects
替换为卷曲中的groups
。
https://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'])
......................................
......................................