十分钟熟知Gitlab API

前言

Gitlab作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过gitlab的同学都知道,想要提交一段代码,可以通过git push提交到远程仓库,也可以直接在gitlab平台上修改提交。然而上述两种提交方式都是人工提交代码,需要手动登录gitlab或者在第一次commit的时候提供gitlab帐号和密码。那么,假设有这么一个需求场景:我们开发了一个效率平台,可以自动拉分支、自动提交代码到远程仓库。这个需求该如何实现?其实很简单,gitlab提供了一套完整的API,让第三方平台可以通过API自动创建帐号、自动提交代码、自动拉分支,等等。API涉及到的功能非常全面,覆盖了分支、tag、代码提交、用户、群组、项目等,基本上人工可以做的所有操作,都可以通过API自动实现。

身份认证

Gitlab的所有API都需要提供private_token参数进行用户身份认证(除了用来获得private_token的接口本身)。如果没有提供或者提供的private_token不合法,API将会返回401错误码。

{"message":"401 Unauthorized"}

private_token是用来代表用户身份的字符串,和用户是一一对应的关系,http请求中包含这个就可以免输入用户名和密码。

获得private_token的方式有两种:

方法一:查看帐号设置(Profile Settings -> Account)。如下图:

方法二:通过Session API获得Gitlab提供了一个API获取某个用户对应的private_token,这样就能把所有操作都完全自动化起来,也方便了Gitlab与其它系统/平台打通。Session接口需要提供帐号密码来进行身份认证。

API分类介绍

从功能上划分,gitlab API可分为以下几类:

会话(/session)

此类API只包含一个接口,接口的作用是提供用户帐号(或者邮箱帐号)和密码,获得该用户的private_token,后续所有的API都用此token做身份认证。  因为这里的密码是明文提供,所以为了安全起见,最好将gitlab服务部署为https,保证帐号信息不会被非法窃取。

用户帐号(/users)

包括:

1. 查看单个用户信息

2. 查看所有用户信息

3. 查看当前认证用户信息* 帐号的创建、修改、删除、封禁(只有管理员有权限做此操作)

4. SSH Key增删改查(非管理员只能操作自身的,管理员可以操作所有人)

5. 用户邮箱增删改查(非管理员只能操作自身的,管理员可以操作所有人)

群组(Group)和命名空间(Namespace)

Gitlab项目的权限控制是基于命名空间来做的。命名空间包括群组和用户两种。此类API包括命名空间的查询、群组的增删改查等。

项目(/projects)

主要包括:

1. 列出当前用户有权限访问的所有项目

2. 列出当前用户拥有的(owned)所有项目

3. 列出当前用户标星了(starred)的项目

4. 列出所有项目(只有管理员有权限做此操作)

5. 查看单个项目

6. 从新到旧列出某个项目的所有事件(events)

7. 创建、编辑、删除有权限的项目

8. 项目成员操作

9. 项目hooks操作

10. 根据项目名搜索项目(模糊搜索)

分支(Branches)

主要包括:

1. 查看仓库的单个、所有分支

2. 保护(protect)某个分支、去掉某个分支的保护(unprotect)

3. 创建、删除分支

Tags

主要包括:

1. 查看仓库所有tag

2. 创建、删除tag

3. 创建、修改release

项目仓库(Repositories)

主要包括:

1. 查看仓库代码目录树

2. 查看某个文件的明文文本

3. 对比不同分支、tag或者提交(commit)

4. 列出仓库的所有提交人

仓库代码文件(Repository files)

提交代码主要通过操作(CURD, Create, Update, Read, Delete)某个代码文件来完成。和命令行不同的是,用API提交代码时不会有版本冲突,因为它总是用新内容覆盖掉当前文件的内容。

提交(commit)

包括:

1. 查询提交

2. 查看提交的对比(diff)

3. 查询提交的注释(comment)

4. post某次提交的注释

5. 查询某次提交的状态

代码合并(merge)

即操作代码合并,包括合并请求的查询、提交等。

注释(Notes, Comments)

注释的增改查。

 项目快照(snippets)

查看、创建、修改、删除一个或者多个项目快照。

 项目构建(Builds)

如果使用了gitlab的持续集成功能,可以通过操作构建的API来管理(CURD)所有构建。

一些不常用的功能

包括Issues, Labels, Milestones, Deploy Keys, System Hooks, Settings等的操作。

服务(services)

包括Asana, Assembla, Atlassian Bamboo CI, Buildkite, Campfire, Custom Issue Tracker, Drone CI, Emails on push, External Wiki, Flowdock, Gemnasium, GitLab CI, HipChat, Irker (IRC gateway), JIRAPivotalTracker, Pushover, Redmine, Slack, JetBrains TeamCity CI(再次感叹gitlab服务的强大和全面)。因为都不是特别常用,所以这里不一一介绍,有需要可自行查阅API帮助文档。

使用示例:拉分支

第一步:获取private_token

代码片段:

第二步:新建分支

代码片段:

特别提示

token缓存

如果用户没有手动重置private_token,那么private_token是固定不变的,所以没有必要每次都调API去获取,而是可以将它缓存起来,以提升性能。当遇到API返回401 Unauthorized的情况时,再调Session接口重新获取token并更新缓存。

Http请求方法

特别注意,gitlab api限制了请求的方法,一般查询请求是GET,创建请求是POST,修改请求是PUT,删除请求是DELETE,方法写错了api将返回405 Method Not Allowed错误。

帮助文档

作为一个强大靠谱的服务,gitlab提供了API的帮助文档,上面有注明所有API的使用简单示例。

帮助文档入口:{gitlab_host}/help/api/README.md;或者点击主菜单“Help” -> 点击Documentation底下的API进入,如图所示:

帮助文档入口
API 文档
删除分支接口

最后

当前笔者正在研究gitlab的源码,后续会分享更多的东西给大家,比如gitlab的api是如何实现的,是否存在安全或者效率的问题,应当如何改进等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,330评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,571评论 18 139
  • 恰逢公司年终工作总结,回顾自己过去一年,不禁感慨万分,几近老泪纵横。 最近看文章看到几段话,触景生情,莫名被触碰到...
    进击的安酱阅读 358评论 0 0