笨方法利用Gitlab API批量修改权限
写在前面
坦白讲,写下此篇博客的时候我正痛苦万分,悔恨不已,为什么早些时候没有在Python上多下功夫,以致于面临现在的窘境。公司几百个Gitlab项目,领导为了方便内部不同小组之间的技术交流,让我对Gitlab的权限做一个规整,将敏感项目设为member可见,非敏感项目设为登录可见。这么多项目如果挨个手动去改,手估计得废掉,所以只能利用GItlab API去批量修改,网上有找到类似的Python脚本,然而我照葫芦画瓢都画不下来,着实蠢的一笔,写不来Python,就只能用其它的方法咯。
Gitlab权限
-
Gitlab的项目访问类型有三种:
- Public:任何人可见
- Internal:登录Gitlab的用户可见
- Private:授权的member可见
-
修改Gitlab项目权限时需要注意(项目和其所属组都是Private类型的情况):
- 如果想要将Private类型的项目修改为Internal,需要先修改项目所属组的Visibility。
- 如果项目所属组还有父组,则需要先修改父组的Visibility,就好比俄罗斯套娃一样,要先拿掉最外层,才能看见里面的一层。
实施步骤
1. 首先要设置一个access token,创建完成后要记录一下token,否则离开此页面token就不可见了。
2. 以curl命令取出所有的组,并以json的格式显示。
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6337 100 6337 0 0 46047 0 --:--:-- --:--:-- --:--:-- 55587 [ { "id": 4, # 组id "name": "jerry", 组名 "parent_id": null, 父组id "visibility": "private", 组访问类型 "web_url": "http://192.168.2.225/groups/jerry" } ]
3. 查看Jerry组中的项目。
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups/4/projects | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1733 100 1733 0 0 21822 0 --:--:-- --:--:-- --:--:-- 21936 [ { "id": 9, # 项目id "name": "test", # 项目名称 "name_with_namespace": "jerry / test", "namespace": { "id": 4, # 所属组id "kind": "group", "name": "jerry", # 所属组 "parent_id": null, # 所属组的父组 }, "visibility": "private", # 项目的访问类型,也就是可见性。 } ] # 由于输出信息较长,所以只截取了部分内容。
4. 上面有说过,项目和其所属组都是Private类型时,想要修改项目的Visibility,需要先修改其所属组的Visibility。就照上面的例子,我们先修改Jerry组的visibility.
[root@monitor ~]# curl -X PUT --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups/4?visibility=internal
# 查看id为4的Jerry组是否修改成功
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups/4 | python -m json.tool | tail -3
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2016 100 2016 0 0 26681 0 --:--:-- --:--:-- --:--:-- 26880 "visibility": "internal", "web_url": "http://192.168.2.157/groups/jerry" }
5. 所属组的visibility修改为Internal后,就可以修改项目的visibility了。
[root@monitor ~]# curl -X PUT --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/projects/9?visibility=internal
# 查看id为9的test项目是否修改成功。
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/projects/9 | python -m json.tool | tail -4
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1887 100 1887 0 0 20763 0 --:--:-- --:--:-- --:--:-- 20966 "visibility": "internal", "web_url": "http://192.168.2.157/jerry/test", "wiki_enabled": true }
上面只是介绍了Gitlab API的简单使用,如果想要实现几百个项目的批量修改,且没有更简洁的方法,可以瞅瞅下面的。
1. 项目过多时,curl命令有可能取不出所有的组或者项目,这时我们可以借助浏览器。
a) 取出所有组
写在前面
坦白讲,写下此篇博客的时候我正痛苦万分,悔恨不已,为什么早些时候没有在Python上多下功夫,以致于面临现在的窘境。公司几百个Gitlab项目,领导为了方便内部不同小组之间的技术交流,让我对Gitlab的权限做一个规整,将敏感项目设为member可见,非敏感项目设为登录可见。这么多项目如果挨个手动去改,手估计得废掉,所以只能利用GItlab API去批量修改,网上有找到类似的Python脚本,然而我照葫芦画瓢都画不下来,着实蠢的一笔,写不来Python,就只能用其它的方法咯。
Gitlab权限
-
Gitlab的项目访问类型有三种:
- Public:任何人可见
- Internal:登录Gitlab的用户可见
- Private:授权的member可见
-
修改Gitlab项目权限时需要注意(项目和其所属组都是Private类型的情况):
- 如果想要将Private类型的项目修改为Internal,需要先修改项目所属组的Visibility。
- 如果项目所属组还有父组,则需要先修改父组的Visibility,就好比俄罗斯套娃一样,要先拿掉最外层,才能看见里面的一层。
实施步骤
1. 首先要设置一个access token,创建完成后要记录一下token,否则离开此页面token就不可见了。
2. 以curl命令取出所有的组,并以json的格式显示。
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6337 100 6337 0 0 46047 0 --:--:-- --:--:-- --:--:-- 55587 [ { "id": 4, # 组id "name": "jerry", 组名 "parent_id": null, 父组id "visibility": "private", 组访问类型 "web_url": "http://192.168.2.225/groups/jerry" } ]
3. 查看Jerry组中的项目。
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups/4/projects | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1733 100 1733 0 0 21822 0 --:--:-- --:--:-- --:--:-- 21936 [ { "id": 9, # 项目id "name": "test", # 项目名称 "name_with_namespace": "jerry / test", "namespace": { "id": 4, # 所属组id "kind": "group", "name": "jerry", # 所属组 "parent_id": null, # 所属组的父组 }, "visibility": "private", # 项目的访问类型,也就是可见性。 } ] # 由于输出信息较长,所以只截取了部分内容。
4. 上面有说过,项目和其所属组都是Private类型时,想要修改项目的Visibility,需要先修改其所属组的Visibility。就照上面的例子,我们先修改Jerry组的visibility.
[root@monitor ~]# curl -X PUT --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups/4?visibility=internal
# 查看id为4的Jerry组是否修改成功
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/groups/4 | python -m json.tool | tail -3
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2016 100 2016 0 0 26681 0 --:--:-- --:--:-- --:--:-- 26880 "visibility": "internal", "web_url": "http://192.168.2.157/groups/jerry" }
5. 所属组的visibility修改为Internal后,就可以修改项目的visibility了。
[root@monitor ~]# curl -X PUT --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/projects/9?visibility=internal
# 查看id为9的test项目是否修改成功。
[root@monitor ~]# curl --header "PRIVATE-TOKEN:cDsx87ioWwzgcVfYgX5N" http://192.168.2.225/api/v4/projects/9 | python -m json.tool | tail -4
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1887 100 1887 0 0 20763 0 --:--:-- --:--:-- --:--:-- 20966 "visibility": "internal", "web_url": "http://192.168.2.157/jerry/test", "wiki_enabled": true }
上面只是介绍了Gitlab API的简单使用,如果想要实现几百个项目的批量修改,且没有更简洁的方法,可以瞅瞅下面的。
1. 项目过多时,curl命令有可能取不出所有的组或者项目,这时我们可以借助浏览器。
a) 取出所有组