16

我想获取 Gitlab 中特定组下的所有项目的列表。这是示例场景:

A 组 (id: 1) 有 3 个项目

A组/项目1

A组/项目2

A组/项目3

B 组 (id: 2) 有 5 个项目

B组/项目1

B组/项目2

B组/项目3

B组/项目4

B组/项目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 文档

4

6 回答 6

9

如果您使用 curl,这将非常方便。

只需使用此代码

curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" http://gitlab.your_namespace.com/api/v4/groups/your_group/projects

于 2017-04-06T11:39:53.010 回答
7

您还可以使用最近发布的Gitlab GraphQL API按名称查询组:

{
  group(fullPath: "your_group_here") {
    projects {
      nodes {
        name
        description
        httpUrlToRepo
        nameWithNamespace
        starCount
      }
    }
  }
}

您可以访问以下 URL:https://[your_gitlab_host]/-/graphql-explorer并通过上述查询

的示例:

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 '.'
于 2019-10-26T14:56:21.393 回答
5

我在 Gitlab 8.0 上进行了测试。其组 API 可以提供特定组下的项目列表。只需http://gitlab.example.com/api/v3/groups/[group_id]?private_token=xxxxxxxxxxxx 使用您的私人令牌发送 GET 请求即可。

例如:http://gitlab.example.com/api/v3/groups/3?private_token=xxxxxxxxxxxxx

projects在 JSON 响应中,列表是key下的数组。

于 2015-10-02T08:54:36.557 回答
4

添加到@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
于 2019-12-05T14:33:45.230 回答
3

我想做类似的事情,从多个组中获取所有项目。

我可以看到有两种方法可以做到这一点,具体取决于您对小组了解多少信息以及您需要它有多动态。

选项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 程序员,所以毫无疑问有更好的方法来实现这一点或改进代码,但这符合我的需要,因为它只需要偶尔运行,所以速度对我来说不是问题

于 2015-07-31T09:33:03.720 回答
1

添加到 GraphQL 上的 Betrands 答案。您可以使用下面的查询查看所有子组。

{
  group(fullPath: "**your_group_here**") {
    projects (includeSubgroups: true){
      nodes {
        name
        description
        archived
      }
    }
  }
}
于 2020-04-16T14:10:56.990 回答