Python Gitlab Api 使用方法
简述
公司使用gitlab来托管代码,日常代码mergerequest以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python管理。
官方文档
安装
pipinstallpython-gitlab
环境:py3
DEMO
#-*-coding:utf-8-*-
__Author__="xiewm"
__Date__='2017/12/2613:46'
"""
gitlab经常使用到的api
DOC_URL:http://python-gitlab.readthedocs.io/en/stable/
LOCAL_PATH:C:\Python36\Lib\site-packages\gitlab
"""
importgitlab
url='http://xxxxxxx'
token='xxxxxxxxxxxxxx'
#登录
gl=gitlab.Gitlab(url,token)
#----------------------------------------------------------------#
#获取第一页project
projects=gl.projects.list()
#获取所有的project
projects=gl.projects.list(all=True)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取所有project的name,id
forpingl.projects.list(all=True,as_list=False):
print(p.name,p.id)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取第一页project的name,id
forpingl.projects.list(page=1):
print(p.name,p.id)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#通过指定id获取project对象
project=gl.projects.get(501)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#查找项目
projects=gl.projects.list(search='keyword')
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#创建一个项目
project=gl.projects.create({'name':'project1'})
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取公开的项目
projects=gl.projects.list(visibility='public')#public,internalorprivate
#----------------------------------------------------------------#
#获取project对象是以下操作的基础
#----------------------------------------------------------------#
#通过指定project对象获取该项目的所有分支
branches=project.branches.list()
print(branches)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取指定分支的属性
branch=project.branches.get('master')
print(branch)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#创建分支
branch=project.branches.create({'branch_name':'feature1',
'ref':'master'})
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#删除分支
project.branches.delete('feature1')
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#分支保护/取消保护
branch.protect()
branch.unprotect()
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取指定项目的所有tags
tags=project.tags.list()
#获取某个指定tag的信息
tags=project.tags.list('1.0')
#创建一个tag
tag=project.tags.create({'tag_name':'1.0','ref':'master'})
#设置tags说明:
tag.set_release_description('awesomev1.0release')
#删除tags
project.tags.delete('1.0')
#or
tag.delete()
#----------------------------------------------------------------#
#获取所有commitinfo
commits=project.commits.list()
forcincommits:
print(c.author_name,c.message,c.title)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取指定commit的info
commit=project.commits.get('e3d5a71b')
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取指定项目的所有mergerequest
mrs=project.mergerequests.list()
print(mrs)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#获取指定mrinfo
mr=project.mergerequests.get(mr_id)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#创建一个mergerequest
mr=project.mergerequests.create({'source_branch':'cool_feature',
'target_branch':'master',
'title':'mergecoolfeature',})
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#更新一个mergerequest的描述
mr.description='Newdescription'
mr.save()
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#开关一个mergerequest(closeorreopen):
mr.state_event='close'#or'reopen'
mr.save()
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#DeleteaMR:
project.mergerequests.delete(mr_id)
#or
mr.delete()
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#AcceptaMR:
mr.merge()
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#指定条件过滤所有的mergerequest
#state:stateoftheMR.Itcanbeoneofall,merged,openedorclosed
#order_by:sortbycreated_atorupdated_at
#sort:sortorder(ascordesc)
mrs=project.mergerequests.list(state='merged',sort='asc')#all,merged,openedorclosed
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#创建一个commit
data={
'branch_name':'master',#v3
'commit_message':'blahblahblah',
'actions':[
{
'action':'create',
'file_path':'blah',
'content':'blah'
}
]
}
commit=project.commits.create(data)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#Comparetwobranches,tagsorcommits:
result=project.repository_compare('develop','feature-20180104')
print(result)
#getthecommits
forcommitinresult['commits']:
print(commit)
#
#getthediffs
forfile_diffinresult['diffs']:
print(file_diff)
#----------------------------------------------------------------#
#----------------------------------------------------------------#
#getthecommits
forcommitinresult['commits']:
print(commit)
#
#getthediffs
forfile_diffinresult['diffs']:
print(file_diff)
#----------------------------------------------------------------#
总结
通过以上的api可以封装一整套gitlab的脚本操作或者是命令行操作。
以上这篇PythonGitlabApi使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。