1. 程式人生 > 其它 >gitlab官方api使用

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])
本文版權歸作者所有,歡迎轉載,請務必新增原文連結。