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中操作字典之setdefault()方法的使用
May 21 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
python 使用get_argument获取url query参数
Apr 28 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
python看某个模块的版本方法
Oct 16 Python
Python中Numpy ndarray的使用详解
May 24 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
keras小技巧——获取某一个网络层的输出方式
May 23 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
解决Python字典查找报Keyerror的问题
May 26 Python
Django+Celery实现定时任务的示例
Jun 23 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绘图之加载外部图片的方法
2015/01/24 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
jquery 使用简明教程
2014/03/05 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
python中map()与zip()操作方法
2016/02/27 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
对python 调用类属性的方法详解
2019/07/02 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
会计毕业生自我鉴定
2013/11/04 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
小学生评语集锦
2014/04/18 职场文书
金秋助学感谢信
2015/01/21 职场文书
2015入党自传书范文
2015/06/26 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记