Python Gitlab Api 使用方法


Posted in Python onAugust 28, 2019

简述

公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python 管理。

官方文档

安装

pip install python-gitlab

环境: py3

DEMO

# -*- coding: utf-8 -*-
__Author__ = "xiewm"
__Date__ = '2017/12/26 13:46'

"""
gitlab 经常使用到的api
DOC_URL: http://python-gitlab.readthedocs.io/en/stable/
LOCAL_PATH: C:\Python36\Lib\site-packages\gitlab
"""

import gitlab

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
for p in gl.projects.list(all=True, as_list=False):
  print(p.name, p.id)
# ---------------------------------------------------------------- #


# ---------------------------------------------------------------- #
# 获取第一页project的name,id
for p in gl.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, internal or private
# ---------------------------------------------------------------- #


# 获取 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('awesome v1.0 release')

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

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


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


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


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


# ---------------------------------------------------------------- #
# 创建一个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()
# ---------------------------------------------------------------- #


# ---------------------------------------------------------------- #
# Delete a MR:
project.mergerequests.delete(mr_id)
# or
mr.delete()
# ---------------------------------------------------------------- #


# ---------------------------------------------------------------- #
# Accept a MR:
mr.merge()
# ---------------------------------------------------------------- #


# ---------------------------------------------------------------- #
# 指定条件过滤 所有的merge request
# state: state of the MR. It can be one of all, merged, opened or closed
# order_by: sort by created_at or updated_at
# sort: sort order (asc or desc)
mrs = project.mergerequests.list(state='merged', sort='asc') # all, merged, opened or closed
# ---------------------------------------------------------------- #



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



# ---------------------------------------------------------------- #
# Compare two branches, tags or commits:
result = project.repository_compare('develop', 'feature-20180104')
print(result)
# get the commits

for commit in result['commits']:
  print(commit)
#
# get the diffs
for file_diff in result['diffs']:
  print(file_diff)
# ---------------------------------------------------------------- #





# ---------------------------------------------------------------- #
# get the commits
for commit in result['commits']:
  print(commit)
#
# get the diffs
for file_diff in result['diffs']:
  print(file_diff)
# ---------------------------------------------------------------- #

总结

通过以上的api 可以封装一整套gitlab 的脚本操作或者是命令行操作。

以上这篇Python Gitlab Api 使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python原始字符串(raw strings)用法实例
Oct 13 Python
python操作字典类型的常用方法(推荐)
May 16 Python
Python快速查找list中相同部分的方法
Jun 27 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
Python FFT合成波形的实例
Dec 04 Python
简单介绍django提供的加密算法
Dec 18 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
总结python多进程multiprocessing的相关知识
Jun 29 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 #Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 #Python
Python的垃圾回收机制详解
Aug 28 #Python
Python通过cv2读取多个USB摄像头
Aug 28 #Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 #Python
Django--权限Permissions的例子
Aug 28 #Python
Python中函数的返回值示例浅析
Aug 28 #Python
You might like
php无限极分类实现的两种解决方法
2013/04/28 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP中header用法小结
2016/05/23 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
Async Validator 异步验证使用说明
2017/07/03 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
django实现日志按日期分割
2020/05/21 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
英语专业学子个人的自我评价
2013/10/02 职场文书
写好求职信第一句话的技巧
2013/10/26 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
爱情保证书大全
2014/04/29 职场文书
商业用房租赁协议书
2014/10/13 职场文书
务虚会发言材料
2014/12/25 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js