【python 第三方库】python-gitlab

2024-01-25 00:00:00

目录:

python-gitlab 模块介绍

python-gitlab 模块为开发者提供了便捷访问GitLab服务器API的能力,该库完美支持 GitLab v4 API 版本。

安装依赖:

$ pip3 install python-gitlab

配置连接

使用 python-gitlab 之前,需要配置与 GitLab 的连接。最简单的方式是使用 GitLab 的个人访问令牌(Personal Access Token)。

import gitlab

# 使用访问令牌初始化GitLab客户端
gl = gitlab.Gitlab('https://gitlab.com', private_token='YOUR_ACCESS_TOKEN')

获取项目列表

# 获取第一页项目列表
projects = gl.projects.list()

# 获取所有项目(分页返回)
projects = gl.projects.list(all=True)

# 获取所有项目(另一种方式)
projects = gl.projects.all()

# 获取公开项目
projects = gl.projects.list(visibility='public')  # public, internal or private

创建新项目

project_data = {
    'name': 'my_new_project',
    'namespace_id': 1,  # 可以修改为你自己的命名空间ID
    'visibility': 'private'
}
project = gl.projects.create(project_data)
print(f'项目创建成功:{project.name}')

获取特定项目

# 通过 ID 获取项目
project = gl.projects.get(501)

# 通过项目路径获取
project = gl.projects.get('your_username/my_new_project')

分支操作

# 获取项目的所有分支
branches = project.branches.list()

# 获取指定分支属性
branch = project.branches.get('master')

# 创建分支
branch = project.branches.create({
    'branch_name': 'feature1',
    'ref': 'master'
})

# 分支保护/取消保护
branch.protect()
branch.unprotect()

# 删除分支
project.branches.delete('feature1')

标签操作

# 获取所有tags
tags = project.tags.list()

# 获取指定tag信息
tag = project.tags.get('1.0')

# 创建tag
tag = project.tags.create({
    'tag_name': '1.0',
    'ref': 'master'
})

# 设置tag说明
tag.set_release_description('awesome v1.0 release')

# 删除tag
project.tags.delete('1.0')

提交操作

# 获取所有commit信息
commits = project.commits.list()
for c in commits:
    print(c.author_name, c.message, c.title)

# 获取指定commit信息
commit = project.commits.get('e3d5a71b')

# 创建提交
commit_message = '添加了新的代码文件'
files = {'new_file.py': 'print("Hello, GitLab!")'}

commit = project.commits.create({
    'branch': 'main',
    'commit_message': commit_message,
    'actions': [{'action': 'create', 'file_path': file_path, 'content': content}
                for file_path, content in files.items()]
})

比较分支差异

# 比较两个分支、tags 或 commits
result = project.repository_compare('develop', 'feature-20180104')

# 获取commits
for commit in result['commits']:
    print(commit)

# 获取 diffs
for file_diff in result['diffs']:
    print(file_diff)

合并请求操作

# 获取所有merge request
mrs = project.mergerequests.list()

# 获取指定MR信息
mr = project.mergerequests.get(mr_id)

# 创建merge request
mr = project.mergerequests.create({
    'source_branch': 'cool_feature',
    'target_branch': 'master',
    'title': 'merge cool feature',
})

# 更新MR描述
mr.description = 'New description'
mr.save()

# 关闭或重新打开MR
mr.state_event = 'close'  # 或 'reopen'
mr.save()

# 接受MR
mr.merge()

# 删除MR
project.mergerequests.delete(mr_id)

# 按条件过滤MR
mrs = project.mergerequests.list(state='merged', sort='asc')

用户操作

# 添加用户
user_data = {
    'email': 'new_user@example.com',
    'username': 'new_user',
    'name': 'New User',
    'password': 'secure_password',
    'provider': 'ldap'  # 或 'gitlab' 取决于需要
}
user = gl.users.create(user_data)
print(f'用户创建成功:{user.username}')

项目成员操作

# 添加用户到项目并设置权限
user_id = 123  # 替换为用户ID
project_member_data = {
    'user_id': user_id,
    'access_level': gitlab.DEVELOPER_ACCESS  # 30=开发者权限
}
project.members.create(project_member_data)
print("Added user to the project with developer access.")

issue 操作

# 创建 issue
new_issue = project.issues.create({
    'title': '新问题示例',
    'description': '这是一个通过Python脚本创建的问题',
    'assignee_ids': [12345]  # 替换为实际用户ID
})
print(f"Issue已创建: {new_issue.web_url}")

# 关闭 issue
issue = project.issues.get(issue_id=42)
issue.state_event = 'close'
issue.save()
print(f"问题 {issue.id} 已关闭")

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: