zoukankan      html  css  js  c++  java
  • 笨方法利用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) 取出所有组

       b) 取出所有项目

       c) 参数说明

         ① per_page=100:每页最多显示100。
         ② page=1:表示第一页。当项目过多时,一页显示不完,就需要第二页,第三页。
         ③ single=true:简洁显示内容,当项目过多时,只看主要内容可以加上此参数,与前面的参数以&分隔。

     2. 所有组和所有项目都取出来了,然后可以把页面内容全选复制粘贴在一个文档中,通过命令取过滤一些你需要修改的组和项目id。

       a) 把需要修改visibility的组id过滤然后追加到一个文档,for循环以curl -X PUT去修改就可以了,多循环几遍就可以把文件中的group和subgroup都修改成功。
       b) 组修改成功后,同样是利用for循环去修改项目的visibility。

      

    结尾感言

      因为菜所以折腾了这么久,落后就要吃苦这话木得说错。上面是一个小小总结,后续有更简洁的方式也会再贴出来。

      
      

    写作不易,转载请注明出处,谢谢~~

  • 相关阅读:
    “Hello World”团队第一周博客汇总
    SFTP服务器之创建普通用户
    软工2017第五周——个人PSP
    "Hello world!"团队第一次会议
    软工2017第四周作业--结对编程之四则运算
    软工2017第四周作业结对编程——个人psp
    软工2017第四周作业结对编程——单元测试
    软工2017第四周作业——代码规范
    软工第三次作业——个人PSP
    iOS原生和React-Native之间的交互1
  • 原文地址:https://www.cnblogs.com/ccbloom/p/11502808.html
Copyright © 2011-2022 走看看