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 使用 curljq 的示例:

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
      }
    }
  }
}