工作中的场景,记录下来分享给大家。

需求

公司私有部署了gitlab保存公司代码,希望在发布系统中可以展示项目在gitlab的提交历史,供发布人员选择提交commit记录并构建对应的docker镜像。

不可行的方案

但是很快我就发现,这个方案是不可行的。

这个库实际上相当于git客户端,它必须把gitlab远程仓库的代码checkout到本地,然后才能执行类似git log命令的方式获取提交日志。

对于一个web应用来说,仅仅为了看一下提交历史就要把代码下载回来,显然是合理的。

建议方案

解决方法是直接访问gitlab的API,它拥有所有的仓库,因此也可以快速的查看提交历史。

首先创建客户端:

import gitlab

client = gitlab.Gitlab(https://gitlab-team.tiantian.com, private_token='XXXXXXXXXX', timeout=2, api_version='3')第一个参数:gitlab服务端地址

private_token:它支持多种登录认证方式,常见的就是帐号+密码 或者 授权一个token(去gitlab中分配)。

timeout:超时时间单位是秒。

api_version:需要看一下gitlab服务端的版本,较旧的服务端版本提供的是v3的API,最新的提供的是v4 API,版本不对应是无法访问通gitlab的。

现在我们要主动发起认证:

client.auth()

然后获取到project:

project = client.projects.get('python/web')

该库整体遵循同样的面向对象以及资源风格,因此获取projects就是projects.get(),列举projects就是projects.list()。

拿到project后,就可以进一步获取其下的commits信息:

commits = project.commits.list(ref_name='master', page=0, per_page=20)

print(commits)

可以筛选特定分支的提交记录,支持翻页(注意第一页page=0)。

最终得到的结果是什么呢?

[, , , , , , , , , ]

没错,若干ProjectCommit对象组成的列表,依旧遵循面向对象风格。

我们可以遍历每个Commit对象,进一步获取其信息:

for c in commits:

print(c.id, c.committer_name, c.created_at, c.message)

输出如下:

e8c0320b7d76888b50b4704c986ab162f729d9d2 owen 2019-02-12T15:39:51.000+08:00 修复BUG

7e0e6a24742fe8dca494aee37dacfff4c5986102 owen 2019-02-01T18:17:46.000+08:00 添加REDIS

e91f06831edaa848ffa9e43d919a91140731af52 owen 2019-01-24T14:02:33.000+08:00 删除调试代码

最后

相信大家已经掌握了该库的使用思路,具体每个对象有什么方法,有哪些属性呢?

python读取git日志_Python获取gitlab提交历史!相关推荐

  1. python读取数据库导出文件_Python 获取 datax 执行结果保存到数据库的方法

    执行 datax 作业,创建执行文件,在 crontab 中每天1点(下面有关系)执行: 其中 job_start 及 job_finish 这两行记录是自己添加的,为了方便识别出哪张表. #!/bi ...

  2. python读取windows日志_Python解析windows系统日志文件

    DOM是Document Object Model的简称,XML 文档的高级树型表示.该模型并非只针对 Python,而是一种普通XML 模型.Python 的 DOM 包是基于 SAX 构建的,并且 ...

  3. python读取windows日志_Python取证技术(3): Windows 事件日志分析

    Windows的事件日志都存放在 C:WindowsSystem32winevtLogs 目录下.以evtx后缀结尾. 事件日志是在windows上记录重要事件发生的特殊文件,当用户登录系统或者程序报 ...

  4. python读取mac地址_python - 获取MAC地址

    python - 获取MAC地址 我需要一种在运行时确定计算机MAC地址的跨平台方法. 对于Windows,可以使用'wmi'模块,我可以找到Linux下唯一的方法是运行ifconfig并在其输出中运 ...

  5. python 读取邮件内容_python获取邮件内容(邮件内容为html)

    用python获取邮件内容比较简单,直接用现成的imap和pop3包即可,但是有时候邮件的内容不是plainText而是html甚至是一个url链接,原本的操作流程是点击url获取内容(比如csv等等 ...

  6. python读取图片分辨率_python获取网页中所有图片并筛选指定分辨率的方法

    压测时,图片太少,想着下载网页中的图片,然后过滤指定分辨率,但网页中指定分辨率的图片太少了(见下) 后使用格式工厂转换图片 import urllib.request # 导入urllib模块 imp ...

  7. python读取git日志_使用python分析git log日志示例

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. python读取手机文件_python 读取 网络 文件

    Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...

  9. python读取pdf表格_Python使用Tabula提取PDF表格数据

    今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...

最新文章

  1. 为什么要学习 Markdown?究竟有什么用?
  2. 33个优秀的 jQuery 图片展示插件分享
  3. greta一些简单实用的字符串匹配
  4. 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)
  5. [css] CSS的伪类和伪对象有什么不同?
  6. Ubantu install jdk
  7. [图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
  8. 审计MySQL 8.0中的分类数据查询
  9. python中非法变量名_第10p,Python中变量名的命名规则与引用
  10. TraceView工具如何使用
  11. 真鱼游来游去动态壁纸_真鱼动态壁纸
  12. 宏晶STC单片机使用STC-ISP串口烧录失败的解决方法及实例汇总 (Ver0.99.15)
  13. OPPO Enco X无线降噪耳机体验评测,加钱变强!
  14. DS堆栈--迷宫求解(数据结构C语言版)
  15. 【科技文献检索】CNKI中国知网检索
  16. 阿凡题——智慧的背囊
  17. javascript网站期末作品~html电影资讯博客网站模板(HTML+CSS+JavaScript)在线电影网页设计...
  18. get请求报404 NOT FOUND问题的原因及解决。
  19. kruskalCase克鲁斯卡尔算法
  20. htmlunit 示例

热门文章

  1. hbase 伪分布安装 java_HBase基础和伪分布式安装配置
  2. enter sleep mode黑屏怎么解决_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...
  3. job每分钟执行 oracle_Oracle Job 每个时间点执行示例
  4. 解压android img文件怎么打开,解压压缩android img文件
  5. 三行代码生成验证码并转换成base64
  6. cmd窗口使用python提示“Python not found”,可能是环境变量配置的原因
  7. mysql配置两个猪数据库_Linux下安装启动多个Mysql
  8. mysql php ajax_PHP 和 AJAX MySQL 数据库实例
  9. 许昌学院计算机学院张伶俐,2019年教育科学学院毕业论文答辩工作安排
  10. matlab启动不了jvm,MATLAB ::在-nojvm启动选项下不再支持此功能