python爬取git上有权限访问的代码

Gitlab权限管理

Gitlab权限管理

Gitlab用户在组中有五种权限:
Guest、Reporter、Developer、Master、Owner

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限
  • Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
  • Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
    Gitlab中的组和项目有三种访问权限:Private、Internal、Public

Visibility Level

  • Private:只有组成员才能看到
  • Internal:只要登录的用户就能看到
  • Public:所有人都能看到

开源项目和组设置的是Internal

批量导出所有项目

# -*- coding: UTF-8 -*-
 
# 在Python3.0测试通过
# 需要在gitlab里面新建一个AccessToken填入gitlabToken
 
import sys
if sys.version_info < (3, 0):
    import urllib
else:
    from urllib.request import urlopen
 
import json
import subprocess, shlex
import time
import os
 
gitlabAddr  = '192.168.20.15:9222'
# gitlabToken获取
gitlabToken = 'G2FQENzmN_fjPF2RAJtb'
 
for index in range(10):
    url= "http://%s/api/v4/projects?private_token=%s&per_page=100&page=%d&order_by=name" % (gitlabAddr, gitlabToken, index)
    print(url)
    
    if sys.version_info < (3, 0):
        allProjects = urllib.urlopen(url)
    else:
        allProjects = urlopen(url)
        
    allProjectsDict = json.loads(allProjects.read().decode(encoding='UTF-8'))
    if len(allProjectsDict) == 0:
        break
    for thisProject in allProjectsDict: 
        try:
            thisProjectURL  = thisProject['http_url_to_repo']
            thisProjectPath = thisProject['path_with_namespace']
            print(thisProjectURL + ' ' + thisProjectPath)
            
            if os.path.exists(thisProjectPath):
                command     = shlex.split('git -C "%s" pull' % (thisProjectPath))
            else:
                command     = shlex.split('git clone %s %s' % (thisProjectURL, thisProjectPath))
            
            resultCode  = subprocess.Popen(command)
            time.sleep(0.5)
        except Exception as e:
            print("Error on %s: %s" % (thisProjectURL, e.strerror))

gitlabToken获取

image-20220323133710235.png

你可能感兴趣的:(python爬取git上有权限访问的代码)