python获取gitlab提交历史

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

需求

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

假设仓库地址:https://gitlab-team.tiantian.com/python/web.git。

不可行的方案

一开始我尝试找到了python的GitPython库:https://pypi.org/project/GitPython/

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

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

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

建议方案

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

我们需要使用python-gitlab库:https://github.com/python-gitlab/python-gitlab

首先创建客户端:

  • 第一个参数:gitlab服务端地址
  • private_token:它支持多种登录认证方式,常见的就是帐号+密码 或者 授权一个token(去gitlab中分配)。
  • timeout:超时时间单位是秒。
  • api_version:需要看一下gitlab服务端的版本,较旧的服务端版本提供的是v3的API,最新的提供的是v4 API,版本不对应是无法访问通gitlab的。

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

然后获取到project:

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

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

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

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

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

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

输出如下:

最后

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

参考2个文档:

前者告诉你Gitlab API有哪些能力,后者告诉你Python如何调用这些API。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~