gitlab官方api使用
一.简介
Gitlab作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过Gitlab的都知道,想要提交一段代码,可以通过git push提交到远程仓库,也可以直接在Gitlab平台上修改提交。然而上述两种提交方式都是人工提交代码,需要手动登录Gitlab或者在第一次commit的时候提供Gitlab帐号和密码。
那么,假设有这么一个需求场景:我们开发了一个效率平台,可以自动拉分支、自动提交代码到远程仓库。这个需求该如何实现?其实很简单,Gitlab提供了一套完整的API,让第三方平台可以通过API自动创建帐号、自动提交代码、自动拉分支,等等。API涉及到的功能非常全面,覆盖了分支、tag、代码提交、用户、群组、项目等,基本上人工可以做的所有操作,都可以通过API自动实现。
Gitlab的Api的文档入口为http://{gitlab_host}/help/api/README.md
二.技术要点
Gitlab本质上也是一个web服务器,Gitlab官方提供了一个非常完整的restful API,我们可以使用apache开发的一个工具包HttpClient,HttpClient可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
当我们想要执行某种操作时,我们只需要在Gitlab的api文档上查找到对应的路径,然后在自己的后台利用HttpClient将对应的链接发送至Gitlab服务器即可,HttpClient功能非常强大,支持get,post,put,delete等七种请求方式。
附录一个讲解HttpClient非常完善的HttpClient 4.3教程
三.案例
获取每个项目下的用户信息
#!/usr/bin/env python
#-*-coding:utf-8-*-
import requests
url = 'http://x.x.x.x/api/v3/projects?private_token=oMJwN5ErC8_n1QvTsyDR&per_page=50' #private_token为必须项,这里为获取所有的项目信息
user_url= 'http://x.x.x.x/api/v3/projects/{}/users?private_token=oMJwN5ErC8_n1QvTsyDR&per_page=100' #获取每个项目下的用户信息
#http://10.10.10.217/api/v3/projects/45/users?private_token=oMJwN5ErC8_n1QvTsyDR #获取项目id为45的信息
#获取项目id和项目名称
def GetProject_id(project_url):
r = requests.get(project_url)
data = r.json()
ProjectId_list = []
ProjectName_list = []
for i in data:
ProjectId_list.append(i['id'])
ProjectName_list.append(i['name'])
return ProjectId_list,ProjectName_list
#根据项目id获取项目下的用户信息
def GetProject_userlist():
IdList = GetProject_id(url)
project_id = IdList[0]
project_name = IdList[1]
for id in project_id:
l = []
project_user = requests.get(user_url.format(id)) #生成完整的用于显示项目下所有user的连接
req_data = project_user.json()
for i in req_data:
l.append(i['name'])
print (project_name[project_id.index(id)],l)
GetProject_userlist()
执行结果:项目名称,用户列表

示例:获取某些项目是否提交代码以及提交时间
#-*-coding:utf-8-*-
import requests
import re
url = 'http://10.10.10.217/api/v3/projects?private_token=oMJwN5ErC8_n1QvTsyDR&per_page=50'
r =requests.get(url)
p_group = ['HJ']
data = r.json()
print ("项目名称",' '*20,'最近提交时间')
for i in data:
if i['ssh_url_to_repo'].split(':')[1].split('/')[0] in p_group:
r1 = requests.get(
'http://x.x.xx.x/api/v3/projects/%d/repository/commits/master?private_token=xxxxxxxxxxxxxxxxx'
% i['id'])
data2 = r1.json()
if data2['message'].strip() == '404 Commit Not Found':
print (i['ssh_url_to_repo'].split(':')[1],' '*11,'未提交任何代码')
else:
print(i['ssh_url_to_repo'].split(':')[1], ' ' * 11, data2['committed_date'][:10])
gitlab官方api使用的更多相关文章
- 关于基本类型值和引用类型值以及Vue官方API的array.$remove(reference)
今天又是孟哥解惑. 数组里的元素也是指向内存地址么? 这个要分情况的. 无论a[0],a[2]在什么地方,只要其值是基本类型值,就是值的比较,只要其值是引用类型(对象),就是内存地址的比较. Vue官 ...
- 国内值得关注的官方API集合
项目地址:https://github.com/marktony/Awesome_API 本页仅收集国内部分官方API,如需查看其他版本,请点击这里. 目录 笔记 出行 词典 电商 地图 电影 后端云 ...
- 通过官方API结合源码,如何分析程序流程
通过官方API结合源码,如何分析程序流程通过官方API找到我们关注的API的某个方法,然后把整个流程执行起来,然后在idea中,把我们关注的方法打上断点,然后通过Step Out,从内向外一层一层分析 ...
- Springboot整合elasticSearch的官方API实例
前言:在上一篇博客中,我介绍了从零开始安装ElasticSearch,es是可以理解为一个操作数据的中间件,可以把它作为数据的存储仓库来对待,它具备强大的吞吐能力和计算能力,其基于Lucene服务器开 ...
- mongodb数据库下载链接,相关配置(转载),官方api
下载链接:http://dl.mongodb.org/dl/win32/x86_64 配置:http://blog.sina.com.cn/s/blog_685213e70101g81t.html 官 ...
- Ext js-02 -官方API文档使用
官方API文档地址: http://docs.sencha.com/extjs/6.5.3/classic/Ext.html 打开网页如下: 1.选择所使用的Ext js版本,后面offline do ...
- 图解DevExpress RichEditControl富文本的使用,附源码及官方API
9点半了,刚写到1.2. 该回家了,明天继续写完. 大家还需要什么操作,留言说一下,没有的我明天继续加. 好久没有玩DevExpress了,今天下载了一个玩玩,发现竟然更新到14.2.5了..我去 ...
- 【完全开源】知乎日报UWP版(上篇):界面设计、官方API分析
目录 说明 使用Fiddler分析android版API 部分效果图 关于源码 说明 在做博客园UWP版的时候其实就有做知乎日报的打算了,前段时间一直出差,在酒店里用Fiddler简单的分析了一下An ...
- 微信分享自定义图片标题摘要-微信官方API
我们平时在使用微信内置浏览器打开网页想要分享给好友或者发到朋友圈的时候经常会遇到这样的问题, 别人的网页分享的时候是这样的: 而我们自己的网页分享后这这样的: 看到有人说不做任何设置,微信分享时会自动 ...
随机推荐
- [atARC128F]Game against Robot
为了方便,下文中的$n$是原来的$\frac{n}{2}$ 当确定排列$\{p_{i}\}$后,将$a_{i}$按照$p_{i}$从大到小排序,那么机器人即会不断选第一个元素 考虑玩家最后选择的$n$ ...
- [cf516E]Drazil and His Happy Friends
令$d=\gcd(n,m)$,存在$x$和$y$使得$xn+i=ym+j$的充要条件是$i\equiv j(mod \ d)$,因此将$xd+i$(其中$0\le i<d$)作为一组,共有$d$ ...
- Go Micro Dashboard - 简介
前言 使用Go Micro开发微服务系统很久了,但是一直没有很好的可视化工具用于开发和监控微服务系统. 所以基于go-micro和ng-alain开发了Go Micro Dashboard,目前已经支 ...
- javascript-初级-day03自定义属性
day01-自定义属性应用 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type ...
- CF1004D Sonya and Matrix
不要想当然. 考虑到我们一定有存在个数为\(4\)的倍数的数. 否则第一个不是的数即为\(x\). 那么我们设\(b\)为所有的数的最大值. 那么显然有\(|n - x| + |m - y| = b\ ...
- [JSC2021 A~D + F]
半小时打完了\(A~D\),想要一发\(F\)冲进前\(100\),结果平衡树常数大\(T\)了.据说\(G\)是矩阵树定. \(A\) 放代码吧. A // code by Dix_ #includ ...
- HDU 6987 - Cycle Binary(找性质+杜教筛)
题面传送门 首先 mol 一发现场 AC 的 csy 神仙 为什么这题现场这么多人过啊啊啊啊啊啊 继续搬运官方题解( 首先对于题目中的 \(k,P\),我们有若存在字符串 \(k,P,P'\) 满 ...
- Codeforces Round #681 (Div. 1) Solution
A. Extreme Subtraction 把这个数组差分一下,发现操作一的作用是把 \(d_1\) 的大小分给 \(d_i\),而操作二的作用是把 \(d_i\) 减去任意值,目标是把 \(d\) ...
- plink 进行PCA分析
当我们进行群体遗传分析时,得到vcf后,可利用plink进行主成分(PCA)分析: 一.软件安装 1 conda install plink 二.使用流程 第一步:将vcf转换为plink格式 1 p ...
- jquery时间轴tab切换效果实现结合swiper实现滑动显示效果
需求:根据时间轴进行tab页面内容切换(时间轴需要滑动查看并选择) 实现思路: 结合swiper插件实现滑动显示效果 根据transform: translateX进行左侧切换效果的实现(具体实现cs ...