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异步回调机制实现和使用方法
Nov 26 Python
python实现多线程暴力破解登陆路由器功能代码分享
Jan 04 Python
详解Python中的Cookie模块使用
Jul 06 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
常用python编程模板汇总
Feb 12 Python
python实现下载整个ftp目录的方法
Jan 17 Python
python简单实例训练(21~30)
Nov 15 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
Python异常模块traceback用法实例分析
Oct 22 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
Python日志器使用方法及原理解析
Sep 27 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和ACCESS写聊天室(九)
2006/10/09 PHP
截获网站title标签之家内容的例子
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/11/17 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
php curl的深入解析
2013/06/02 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
php 常用的系统函数
2017/02/07 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2015年暑假工作总结
2015/07/13 职场文书
新课程改革心得体会
2016/01/22 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书