Gitlab API适用于组下的所有项目

Rag*_*eer 10 git gitlab gitlab-ci

我想获得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文档

nan*_*esh 12

添加到@Dante的答案,

这给出了该组中的前 20 个项目。

curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects
Run Code Online (Sandbox Code Playgroud)

为了获得更多项目,我们应该添加“page”和“per_page”参数。

以下请求将为您获取请求组下最多 100 个项目。

 curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects?&per_page=100" .  
Run Code Online (Sandbox Code Playgroud)

如果您现在想要所有项目,则必须循环浏览页面。更改页面参数。

将 json_pp 添加到您的请求中以获得格式良好的输出。

curl --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxx" https://gitlab.your_namespace.com/api/v4/groups/your_group_id/projects | json_pp
Run Code Online (Sandbox Code Playgroud)


小智 7

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

{
  group(fullPath: "**your_group_here**") {
    projects (includeSubgroups: true){
      nodes {
        name
        description
        archived
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Jac*_* Yu 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

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


Dan*_*nte 5

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

只需使用此代码

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


Ber*_*tel 5

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

{
  group(fullPath: "your_group_here") {
    projects {
      nodes {
        name
        description
        httpUrlToRepo
        nameWithNamespace
        starCount
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Graphql 端点是“https://$gitlab_url/api/graphql”上的 POST 使用 & 的示例:

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 '.'
Run Code Online (Sandbox Code Playgroud)


Dav*_*irk 3

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

我认为有两种方法可以做到这一点,具体取决于您对群组的了解程度以及您需要它的动态程度。

选项1

如果您知道所需组的 ID,那么您可以通过 ID 获取组,这将为您提供项目

projects = Gitlab.group(group_id).projects
Run Code Online (Sandbox Code Playgroud)

选项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
Run Code Online (Sandbox Code Playgroud)

我绝不是一个专业的 Ruby 程序员,所以毫无疑问有更好的方法来实现这一点或改进代码,但这满足了我的需求,因为它只需要偶尔运行,所以速度对我来说不是问题