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()

执行结果:项目名称,用户列表
file

示例:获取某些项目是否提交代码以及提交时间

#-*-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])


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM