python使用 python-gitlab 模块来调用gitlab的API来管理gitlab

1.安装

pip install python-gitlab

2.为了保护API 用到的 private_token,一般会将其写到系统的配置文件中去
/etc/python-gitlab.cfg 或者 ~/.python-gitlab.cfg

我在下面的示例中,是在代码中配置的

 

root@pts/1 $ cat ~/.python-gitlab.cfg
[global]
default = git
ssh_verify = False
timeout = 10

[git]
url = http://10.0.0.1
private_token = xxxxxxxx
api_version = 3

 

 

3.程序使用

在程序中使用的时候可以直接用如下方式调用

 

## login
gl = gitlab.Gitlab.from_config('git', ['~/.python-gitlab.cfg'])
## 得到第一页project列表
projects = gl.projects.list()
## 得到所有project
projects = gl.projects.list(all=True)
projects = gl.projects.all()

 

4.直接使用,自定义脚本获取指定用户或者分组或者全部的代码仓库文件信息、git地址、以及其他一些信息

其他博客也有类似方法,然而并不能拿到群组内项目,现经过小改动,亲测可满足要求
import gitlab
class GitlabAPI(object):

    def __init__(self, *args, **kwargs):
        self.gl = gitlab.Gitlab('https://xxxxxxxxxxx.com', private_token='xxxxxxxxxx',  #参数为gitlab仓库地址和个人private_take
                           api_version='3')

    def get_user_id(self, username):
        """
        通过用户名获取用户id
        :param username:
        :return:
        """
        user = self.gl.users.get_by_username(username)
        return user.id

    def get_group_id(self, groupname):
        """
        通过组名获取组id
        :param groupname:
        :return:
        """
        group = self.gl.groups.get(groupname, all=True)
        return group.id

    def get_user_projects(self, userid):
        """
        获取用户所拥有的项目
        :param userid:
        :return:
        """
        projects = self.gl.projects.owned(userid=userid, all=True)
        result_list = []
        for project in projects:
            result_list.append(project.http_url_to_repo)
        return result_list

  
    def get_group_projects(self, groupname):
        """
        获取组内项目!!!!!!!其他博客也有类似方法,实测不能拿到群组内项目,现经过小改动,亲测可满足要求
        :param groupname:
        :return:
        """
        group = self.gl.groups.get(groupname, all=True)
        projects = group.projects.list(all=True)
        return projects


    def getContent(self, projectID):
        """
        通过项目id获取文件内容
        :param projectID:
        :return:
        """
        projects =self.gl.projects.get(projectID)
        f = projects.files.get(file_path='指定项目中的文件路径', ref='master')
        content = f.decode()
        # print(content)
        return content.decode('utf-8')

    def get_all_group(self):
        """
        获取所有群组
        :return:
        """
        return self.gl.groups.list(all=True)
 
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐