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

时间:2015-07-19 06:05:52

标签: 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 documententation

6 个答案:

答案 0 :(得分:4)

我希望做类似的事情,从许多小组中获得所有项目。

我可以看到有两种方法可以看到,具体取决于您对该群组了解的信息量以及您需要的动态信息。

选项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程序员,因此无疑有更好的方法来实现这一目标或改进代码,但这对我的需求起作用,因为它只需要偶尔运行,因此速度不是问题。我

答案 1 :(得分:4)

我在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键下的数组。

答案 2 :(得分:4)

如果你使用curl,这是非常方便的。

只需使用此代码

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

答案 3 :(得分:1)

添加到@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

答案 4 :(得分:1)

在GraphQL上添加到Betrands答案。您可以通过以下查询查看所有子组。

{
  group(fullPath: "**your_group_here**") {
    projects (includeSubgroups: true){
      nodes {
        name
        description
        archived
      }
    }
  }
}

答案 5 :(得分:0)

您还可以使用最近发布的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 使用的示例:

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 '.'