目录:
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
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} 已关闭")
↶ 返回首页 ↶