Gitlab API for all projects under group

2019-03-27 08:53发布

I want to get a list of all the projects which are under a particular group in Gitlab. Here is the example scenario:

Group A (id: 1) has 3 Project

Group A / Project 1

Group A / Project 2

Group A / Project 3

Group B (id: 2) has 5 Projects

Group B / Project 1

Group B / Project 2

Group B / Project 3

Group B / Project 4

Group B / Project 5

Now if I hit the rest api GET /groups it will give me only the list of groups. If i hit the rest api GET /projects/all, it will give me a list of all the projects.

What I am looking for, is an operation something like GET /groups/:groupid/projects/all

That is: all the projects for that particular group. Like if I say GET /groups/1/projects/all it will give me Project 1, Project 2 and Project 3.

The only way I can think of is to get a list of all the projects and loop over them to see if it matches my group name, but this will be lot of unnecessary parsing.

How can I achieve this in a better way?

I am working on Gitlab CE 7.2.1. I am referring the Gitlab API documententation

3条回答
Bombasti
2楼-- · 2019-03-27 09:24

I was looking to do something similar, getting all of the projects from a number of groups.

There are 2 ways of doing this that I can see, depending on how much info you know about the group and how dynamic you need it to be.

Option 1

If you know the IDs of the groups that you need, then you can get the group by ID and that will provide you with the projects

projects = Gitlab.group(group_id).projects

Option 2

If you don't know the group IDs or need to be able to pass in group names more dynamically, you will need to make an extra call to get all of the groups, loop through them and get the individual groups. This may not be any better than your original idea of looping over all of the projects, depends on how many groups / projects you have

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

I am by no means an expert Ruby programmer, so there are no doubt far better ways of achieving this or improving the code, but this worked for my needs as it only needed to be run occasionally so speed was not an issue for me

查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-03-27 09:35

This is fairly handy if you use curl.

Just use this code

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

查看更多
smile是对你的礼貌
4楼-- · 2019-03-27 09:40

I tested on Gitlab 8.0. Its group API can provide the project list under a specific group. Just send the GET request to http://gitlab.example.com/api/v3/groups/[group_id]?private_token=xxxxxxxxxxxx with your private token.

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

In the JSON response, the list is an array under projects key.

查看更多
登录 后发表回答