使用gitlab API

動(dòng)機(jī)

gitlab是一個(gè)類(lèi)似于github的配置管理服務(wù), 目前已經(jīng)有豐富的Hook服務(wù)和API服務(wù), 能夠很好的支持持續(xù)集成. 本文介紹了筆者是如何開(kāi)始使用gitlab提供的API的. 需求比較簡(jiǎn)單, 取得gitlab上一個(gè)repo的某一個(gè)文件的內(nèi)容.

準(zhǔn)備

gitlab API的使用可以參考你所使用的gitlab服務(wù)上的幫助文檔.

gitlab.png

幫助文檔已經(jīng)比較完善了. gitlab有多種語(yǔ)言版本的client支持, 這里我們使用最直接的http方式. 文檔上給除了如下的例子

GET http://example.com/api/v3/projects?private_token=QVy1PB7sTxfy4pqfZM1U

curl --header "PRIVATE-TOKEN: QVy1PB7sTxfy4pqfZM1U" "http://example.com/api/v3/projects"

這兩個(gè)例子分別列舉了token作為參數(shù), 和作為Header是的使用方法. 在我們的程序中, 我們只需要選擇一種自己覺(jué)得方便的方式就可以了. 這里我選擇用參數(shù)的方式加載token.

token作為用戶(hù)調(diào)用api的唯一標(biāo)識(shí), 在賬戶(hù)的profile下可以找到

token.png

實(shí)踐

這里我使用自己比較熟悉的python語(yǔ)言和其requests擴(kuò)展包來(lái)作為示例

  • 通過(guò)查閱api的幫助文檔, 我們可以推斷出, 想訪(fǎng)問(wèn)某個(gè)項(xiàng)目的內(nèi)容, 首先需要知道這個(gè)項(xiàng)目的id.
    查閱api文檔, 發(fā)現(xiàn)列舉項(xiàng)目的api如下
GET /projects

其返回一個(gè)Json形式的數(shù)據(jù)組.

所以編寫(xiě)如下的腳本取得當(dāng)前用戶(hù)能夠訪(fǎng)問(wèn)的所有項(xiàng)目信息

import requests
url = 'http://gitlab.myserver.com/api/v3/projects?private_token=XXXXXX&per_page=50'
r = requests.get(url)

data = r.json
for i in data:
    if i[u'name']=='Snack-Cherry':
        print i[u'id']    
  • gitlab API的返回值大多是分頁(yè)的, 這里將頁(yè)面的內(nèi)容擴(kuò)展為50個(gè)(項(xiàng)目). 如果當(dāng)前用戶(hù)可以訪(fǎng)問(wèn)的項(xiàng)目太多, 以至于超過(guò)頁(yè)面容量, 那么在返回值里因?yàn)槟J(rèn)返回一頁(yè), 可能就找不到想找的項(xiàng)目
  • 這里我們?cè)谄聊簧洗蛴×?Snack-Cherry" 這個(gè)項(xiàng)目的id
  • 找到了project id, 我們就可以使用這個(gè)id來(lái)訪(fǎng)問(wèn)指定的項(xiàng)目了.
GET /projects/:id/repository/files

使用如下的代碼

url = http://gitlab.myserver.com//api/v3/projects/24948/repository/files?private_token=xxxx
r = requests.get(url)
print r.text

但是我們得到了如下的輸出

u'{"message":"400 (Bad request) \\"file_path\\" not given"}'

原來(lái)是有兩個(gè)參數(shù)忘記加上了.重新修改url如下

url = 'http://gitlab.myserver.com//api/v3/projects/24948/repository/files?private_token=XXXXX&file_path=myfolder/myfile.txt&ref=master'

這樣我們就得到指定的文件了.

  • 解析文件內(nèi)容.
data = r.json['content']
print data

結(jié)果我們得到了一堆如下的文字:

'KioqIFNldHRpbmdzICoqKgpTdWl0ZSBTZXR1cCAgICAgICDlhbP...

這是為什么呢? 在A(yíng)PI說(shuō)明上我們可以找到答案:
Note that file content is Base64 encoded.

所以我們還需要將內(nèi)容轉(zhuǎn)換成UTF-8或者其他可以輸出的形式:

import base64
print base64.b64decode(data)

可以看到屏幕上打出了文件的內(nèi)容.

總結(jié)

gitlab API的文檔已經(jīng)比較詳實(shí), 讀者可以自行選擇語(yǔ)言進(jìn)行調(diào)用. 細(xì)節(jié)問(wèn)題可以仔細(xì)閱讀文檔尋找答案.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子较剃,更是在濱河造成了極大的恐慌咕别,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件写穴,死亡現(xiàn)場(chǎng)離奇詭異顷级,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)确垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)帽芽,“玉大人删掀,你說(shuō)我怎么就攤上這事〉冀郑” “怎么了披泪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)搬瑰。 經(jīng)常有香客問(wèn)我款票,道長(zhǎng),這世上最難降的妖魔是什么泽论? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任艾少,我火速辦了婚禮,結(jié)果婚禮上翼悴,老公的妹妹穿的比我還像新娘缚够。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著批狱,像睡著了一般谤牡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刃唐,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼杖们。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膊毁,可吹牛的內(nèi)容都是我干的胀莹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼婚温,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼描焰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荆秦,失蹤者是張志新(化名)和其女友劉穎篱竭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體步绸,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掺逼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓤介。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吕喘。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刑桑,靈堂內(nèi)的尸體忽然破棺而出氯质,到底是詐尸還是另有隱情,我是刑警寧澤祠斧,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布闻察,位于F島的核電站,受9級(jí)特大地震影響琢锋,放射性物質(zhì)發(fā)生泄漏辕漂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一吴超、第九天 我趴在偏房一處隱蔽的房頂上張望钉嘹。 院中可真熱鬧,春花似錦烛芬、人聲如沸隧期。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仆潮。三九已至,卻和暖如春遣臼,著一層夾襖步出監(jiān)牢的瞬間性置,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工揍堰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏浅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓屏歹,卻偏偏與公主長(zhǎng)得像隐砸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝙眶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理季希,服務(wù)發(fā)現(xiàn)褪那,斷路器,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,277評(píng)論 25 707
  • 1. Gitlab api 格式 2. Python 使用庫(kù) urllib2 3. 獲取項(xiàng)目列表
    Leebor閱讀 1,975評(píng)論 0 0
  • 前言 Gitlab作為一個(gè)開(kāi)源式塌、強(qiáng)大的分布式版本控制系統(tǒng)博敬,已經(jīng)成為互聯(lián)網(wǎng)公司、軟件開(kāi)發(fā)公司的主流版本管理工具峰尝。使用...
    月強(qiáng)閱讀 62,772評(píng)論 12 28
  • 你知道嗎偏窝?其實(shí)我并不是不愛(ài)你了,而是不能愛(ài)了武学。 你知道嗎祭往?我綁你回來(lái),只是想將我打下的江山送給你火窒,護(hù)你百歲...
    司吾墨閱讀 206評(píng)論 0 0