Gitlab API 组下的所有项目
Gitlab API for all projects under group
我想获取 Gitlab 中特定组下的所有项目的列表。这是示例场景:
组 A (id: 1) 有 3 个项目
Group A / Project 1
Group A / Project 2
Group A / Project 3
B 组(id:2)有 5 个项目
Group B / Project 1
Group B / Project 2
Group B / Project 3
Group B / Project 4
Group B / Project 5
现在,如果我点击其余的 api GET /groups
,它只会给我组列表。如果我点击其余的 api GET /projects/all
,它会给我一个所有项目的列表。
我正在寻找的是类似 GET /groups/:groupid/projects/all
的操作
即:该特定组的所有项目。就像我说 GET /groups/1/projects/all
它会给我 Project 1, Project 2 and Project 3
.
我能想到的唯一方法是获取所有项目的列表并遍历它们以查看它是否与我的组名匹配,但这将是很多不必要的解析。
我怎样才能更好地实现这一目标?
我正在研究 Gitlab CE 7.2.1。我指的是 Gitlab API documententation
我想做类似的事情,从多个组中获取所有项目。
我可以看到有 2 种方法可以做到这一点,具体取决于您对群组的了解程度以及您需要它的动态程度。
选项 1
如果你知道你需要的组的ID,那么你可以通过ID获取组,这将为你提供项目
projects = Gitlab.group(group_id).projects
选项 2
如果您不知道群组 ID 或需要能够更动态地传入群组名称,您将需要进行额外调用以获取所有群组,遍历它们并获取各个群组.这可能并不比您最初循环遍历所有项目的想法好多少,具体取决于您有多少组/项目
groups = []
Gitlab.groups.each do |group|
if ['your_group_name', 'another_group_name'].include? group.name
groups << Gitlab.group(group.id)
end
end
projects = []
groups.each do |group|
projects << group.projects
end
我绝不是专家 Ruby 程序员,所以毫无疑问有更好的方法来实现这个或改进代码,但这满足了我的需要,因为它只需要 运行 偶尔这样速度对我来说不是问题
我在Gitlab 8.0上测试过。它的组API可以提供特定组下的项目列表。只需使用您的私人令牌将 GET 请求发送到 http://gitlab.example.com/api/v3/groups/[group_id]?private_token=xxxxxxxxxxxx
。
例如:http://gitlab.example.com/api/v3/groups/3?private_token=xxxxxxxxxxxxx
.
在 JSON 响应中,列表是 projects
键下的数组。
如果您使用 curl
:
,这将非常方便
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" http://gitlab.your_namespace.com/api/v4/groups/your_group/projects
您还可以使用最近发布的 Gitlab GraphQL API 按名称查询群组:
{
group(fullPath: "your_group_here") {
projects {
nodes {
name
description
httpUrlToRepo
nameWithNamespace
starCount
}
}
}
}
您可以转到以下 URL : https://[your_gitlab_host]/-/graphql-explorer 并通过上述查询
Graphql 端点是“https://$gitlab_url/api/graphql”上的 POST
使用 curl
和 jq
的示例:
gitlab_url=<your gitlab host>
access_token=<your access token>
group_name=<your group>
curl -s -H "Authorization: Bearer $access_token" \
-H "Content-Type:application/json" \
-d '{
"query": "{ group(fullPath: \"'$group_name'\") { projects {nodes { name description httpUrlToRepo nameWithNamespace starCount}}}}"
}' "https://$gitlab_url/api/graphql" | jq '.'
添加到@Dante 的回答中,
这给出了组中的前 20 个项目。
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects
要获得更多项目,我们应该添加 'page' 和 'per_page' 参数。
以下请求将在请求的组下为您提取最多 100 个项目。
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects?&per_page=100" .
如果您现在想要所有项目,则必须循环浏览页面。
更改页面参数。
将 json_pp 添加到您的请求以获得格式良好的输出。
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects | json_pp
添加到 GraphQL 上的 Betrands 答案。您可以使用下面的查询查看所有子组。
{
group(fullPath: "**your_group_here**") {
projects (includeSubgroups: true){
nodes {
name
description
archived
}
}
}
}
我想获取 Gitlab 中特定组下的所有项目的列表。这是示例场景:
组 A (id: 1) 有 3 个项目
Group A / Project 1
Group A / Project 2
Group A / Project 3
B 组(id:2)有 5 个项目
Group B / Project 1
Group B / Project 2
Group B / Project 3
Group B / Project 4
Group B / Project 5
现在,如果我点击其余的 api GET /groups
,它只会给我组列表。如果我点击其余的 api GET /projects/all
,它会给我一个所有项目的列表。
我正在寻找的是类似 GET /groups/:groupid/projects/all
即:该特定组的所有项目。就像我说 GET /groups/1/projects/all
它会给我 Project 1, Project 2 and Project 3
.
我能想到的唯一方法是获取所有项目的列表并遍历它们以查看它是否与我的组名匹配,但这将是很多不必要的解析。
我怎样才能更好地实现这一目标?
我正在研究 Gitlab CE 7.2.1。我指的是 Gitlab API documententation
我想做类似的事情,从多个组中获取所有项目。
我可以看到有 2 种方法可以做到这一点,具体取决于您对群组的了解程度以及您需要它的动态程度。
选项 1
如果你知道你需要的组的ID,那么你可以通过ID获取组,这将为你提供项目
projects = Gitlab.group(group_id).projects
选项 2
如果您不知道群组 ID 或需要能够更动态地传入群组名称,您将需要进行额外调用以获取所有群组,遍历它们并获取各个群组.这可能并不比您最初循环遍历所有项目的想法好多少,具体取决于您有多少组/项目
groups = []
Gitlab.groups.each do |group|
if ['your_group_name', 'another_group_name'].include? group.name
groups << Gitlab.group(group.id)
end
end
projects = []
groups.each do |group|
projects << group.projects
end
我绝不是专家 Ruby 程序员,所以毫无疑问有更好的方法来实现这个或改进代码,但这满足了我的需要,因为它只需要 运行 偶尔这样速度对我来说不是问题
我在Gitlab 8.0上测试过。它的组API可以提供特定组下的项目列表。只需使用您的私人令牌将 GET 请求发送到 http://gitlab.example.com/api/v3/groups/[group_id]?private_token=xxxxxxxxxxxx
。
例如:http://gitlab.example.com/api/v3/groups/3?private_token=xxxxxxxxxxxxx
.
在 JSON 响应中,列表是 projects
键下的数组。
如果您使用 curl
:
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" http://gitlab.your_namespace.com/api/v4/groups/your_group/projects
您还可以使用最近发布的 Gitlab GraphQL API 按名称查询群组:
{
group(fullPath: "your_group_here") {
projects {
nodes {
name
description
httpUrlToRepo
nameWithNamespace
starCount
}
}
}
}
您可以转到以下 URL : https://[your_gitlab_host]/-/graphql-explorer 并通过上述查询
Graphql 端点是“https://$gitlab_url/api/graphql”上的 POST
使用 curl
和 jq
的示例:
gitlab_url=<your gitlab host>
access_token=<your access token>
group_name=<your group>
curl -s -H "Authorization: Bearer $access_token" \
-H "Content-Type:application/json" \
-d '{
"query": "{ group(fullPath: \"'$group_name'\") { projects {nodes { name description httpUrlToRepo nameWithNamespace starCount}}}}"
}' "https://$gitlab_url/api/graphql" | jq '.'
添加到@Dante 的回答中,
这给出了组中的前 20 个项目。
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects
要获得更多项目,我们应该添加 'page' 和 'per_page' 参数。
以下请求将在请求的组下为您提取最多 100 个项目。
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects?&per_page=100" .
如果您现在想要所有项目,则必须循环浏览页面。 更改页面参数。
将 json_pp 添加到您的请求以获得格式良好的输出。
curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects | json_pp
添加到 GraphQL 上的 Betrands 答案。您可以使用下面的查询查看所有子组。
{
group(fullPath: "**your_group_here**") {
projects (includeSubgroups: true){
nodes {
name
description
archived
}
}
}
}