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])
最新文章
- arduino 串口实时绘图(以mpu9250为例)
- clipboard_monitor_in_win7
- 基于ZooKeeper的Dubbo注册中心
- OAuth授权过程
- PagedList.MVC分页
- Azure linux centos 默认登陆账号是什么?
- Xcode7 修改bundle identifier
- ASP.NET - URL中参数加密解密操作
- linux设备驱动之字符设备驱动模型(2)
- 关于python环境配置的博客收藏
- asp.net webapi 生成在线文档--Swagger
- Hive shell 基本命令
- springboot的filter使用
- Future接口和FutureTask类【FutureTask实现了Runnable和Future接口】
- eclispse修改项目项目编码
- 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)
- CCF 201709-2公共钥匙盒
- Leetcode题库——7.反转整数
- Python学习-7.Python的循环语句-for语句
- HTML常用汇总
热门文章
- 1组-Alpha冲刺-1/6
- PHP 数组函数分类整理
- 不可忽视的Dubbo线程池
- bat批处理命令及解释
- SpringCloud升级之路2020.0.x版-40. spock 单元测试封装的 WebClient(上)
- mybatis判断集合长度
- layui某个字段不让页面显示显示
- ServerBootstrap的handler()和childHandler()区别
- 使用 SpringBoot 构建一个RESTful API
- Codeforces 671C - Ultimate Weirdness of an Array(线段树维护+找性质)