python-gitlab

 一、插件安装

pip install python-gitlab

官方文档: http://python-gitlab.readthedocs.io/en/stable/

API: https://docs.gitlab.com/ce/api/projects.html

二、获取gitlab token

1、进入账户设置界面

2、选择access tokens,填写信息生成token

三、使用插件

1、登录gitlab

import gitlab

#url: gitlab地址;token: 刚才生成的token
gl = gitlab.Gitlab(url, token)

2、Project

2.1 创建项目 

#创建
project = gl.projects.create({'name':'project1'})

#为特定用户创建项目
alice = gl.users.list(username='alice')[0]
user_project = alice.projects.create({'name': 'project'})

#为特定组创建项目
group_id = gl.groups.list(search='my-group')[0].id
project = gl.projects.create({'name': 'myrepo', 'namespace_id': group_id}) 

2.2 查找和搜索project

#获取项目。默认获取第一页的项目,每页20个
projects = gl.projects.list()

#获取指定页的项目
projects = gl.projects.list(page=2)

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

#根据项目名称搜索项目
projects = gl.projects.list(search='project_name')

#通过指定id 获取 project 对象
project = gl.projects.get(project_id)

#获取archived项目
projects = gl.projects.list(archived=1)

#根据项目visibility获取项目,public,internal,private
projects = gl.projects.list(visibility='public')

#获取当前用户(token的账户)拥有的项目
projects = gl.projects.list(owned=True)

#获取当前用户(token的账户)启动的项目
projects = gl.projects.list(starred=True)

#搜索结果排序
#在不指定的排序标准的情况下默认按照created_at,desc降序排列
#order_by参数:id, name, path, created_at, updated_at, last_activity_at. 
#sort参数:asc,desc.
#查找所有项目,并按照项目id升序排列
projects = gl.projects.list(all=True,order_by='id',sort=‘asc’)

2.3 project基本属性

p=gl.projects.get(460)
print(p)
#输出结果如下:
#可以直接通过p.id,p.name,p.namespace['id']的方式获取单个信息
{
  'id': 460,
  'description': '协议转换转发公共',
  'name': 'xy-transform-forward-common',
  'name_with_namespace': 'xy / xy-transform-forward-common',
  'path': 'xy-transform-forward-common',
  'path_with_namespace': 'xy/xy-transform-forward-common',
  'created_at': '2021-06-11T02:16:33.851Z',
  'default_branch': 'master',
  'tag_list': [],
  'ssh_url_to_repo': 'git@gitlab.xy.in:xy/xy-transform-forward-common.git',
  'http_url_to_repo': 'http://gitlab.xy.in/xy/xy-transform-forward-common.git',
  'web_url': 'http://gitlab.xy.in/xy/xy-transform-forward-common',
  'avatar_url': None,
  'star_count': 0,
  'forks_count': 1,
  'last_activity_at': '2021-07-02T08:47:37.645Z',
  '_links': {
    'self': 'http://gitlab.xy.in/api/v4/projects/460',
    'issues': 'http://gitlab.xy.in/api/v4/projects/460/issues',
    'merge_requests': 'http://gitlab.xy.in/api/v4/projects/460/merge_requests',
    'repo_branches': 'http://gitlab.xy.in/api/v4/projects/460/repository/branches',
    'labels': 'http://gitlab.xy.in/api/v4/projects/460/labels',
    'events': 'http://gitlab.xy.in/api/v4/projects/460/events',
    'members': 'http://gitlab.xy.in/api/v4/projects/460/members'
  },
  'archived': False,
  'visibility': 'private',
  'resolve_outdated_diff_discussions': False,
  'container_registry_enabled': True,
  'issues_enabled': True,
  'merge_requests_enabled': True,
  'wiki_enabled': True,
  'jobs_enabled': True,
  'snippets_enabled': True,
  'shared_runners_enabled': True,
  'lfs_enabled': True,
  'creator_id': 1,
  'namespace': {
    'id': 2,
    'name': 'xy',
    'path': 'xy',
    'kind': 'group',
    'full_path': 'xy',
    'parent_id': None
  },
  'import_status': 'none',
  'import_error': None,
  'open_issues_count': 0,
  'runners_token': 'dWTY9wbm_xMziGKNHLiy',
  'public_jobs': True,
  'ci_config_path': None,
  'shared_with_groups': [],
  'only_allow_merge_if_pipeline_succeeds': False,
  'request_access_enabled': False,
  'only_allow_merge_if_all_discussions_are_resolved': False,
  'printing_merge_request_link_enabled': True,
  'merge_method': 'merge',
  'permissions': {
    'project_access': None,
    'group_access': None
  }
}

2.4 修改和删除project

#修改基本属性
project.snippets_enabled = 1
project.save()

#项目头像可以作为数据(文件的内容)或文件来传递
#以二进制模式打开的对象
project.avatar = open('path/to/file.png', 'rb')
project.save()

#删除
gl.projects.delete(project_id)
project.delete()

2.5 project基本操作

2.5.1 分支管理

#通过指定project对象获取该项目的所有分支
branches = project.branches.list()

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

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

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

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

2.5.2 标签管理

# 获取指定项目的所有tags
tags = project.tags.list(all=True)
 
# 获取某个指定tag 的信息
tags = project.tags.list('1.0')
 
# 创建一个tag
tag = project.tags.create({'tag_name':'1.0', 'ref':'master'})
 
# 设置tags 说明:
tag.set_release_description('awesome v1.0 release')
 
# 删除tags
project.tags.delete('1.0')
# or
tag.delete()

2.5.3 提交管理

#获取所有commit
commits = project.commits.list()

# 获取指定commit的info
commit = project.commits.get('e3d5a71b')

# 创建一个commit
data = {
  'branch_name': 'master', # v3
  'commit_message': 'blah blah blah',
  'actions': [
    {
      'action': 'create',
      'file_path': 'blah',
      'content': 'blah'
    }
  ]
}
commit = project.commits.create(data) 

2.5.4 合并管理

# 获取指定项目的所有merge request
mrs = project.mergerequests.list()

# 指定条件过滤 所有的merge request
# state: mr状态,可选参数merged, opened or closed
# order_by参数:created_at, updated_at
# sort参数: asc, desc
mrs = project.mergerequests.list(state='merged', sort='asc')

# 获取指定mr info
mr = project.mergerequests.get(mr_id)

#获取合并的全部提交列表
commits = mr.commits()

#获取合并的全部修改列表
changes = mr.changes()

#获取合并时将关闭的问题列表
mr.closes_issues()
 
# 创建一个merge request
mr = project.mergerequests.create({'source_branch':'cool_feature',
                  'target_branch':'master',
                  'title':'merge cool feature', })
                  
# 更新一个merge request 的描述
mr.description = 'New description'
mr.save()

# 开关一个merge request (close or reopen):
mr.state_event = 'close' # or 'reopen'
mr.save()

# 删除:
project.mergerequests.delete(mr_id)
# or
mr.delete()
 
# 接受:
mr.merge()

2.5.5 钩子管理

#获取指定项目的现有hooks:
hooks = project.hooks.list()

#获取指定的hook详情:
hook = project.hooks.get(hook_id)

#创建hook
hook = project.hooks.create({'url': 'http://my/action/url', 'push_events': 1})

#更新hook
hook.push_events = 0
hook.save()

#删除hook
project.hooks.delete(hook_id)
# or
hook.delete()

2.5.6 获取项目文件内容

f = project.files.get(file_path=git_path, ref=分支名)
file_content = f.decode()
file_content = file_content.decode()

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值