https://www.jianshu.com/p/ab377b7a156f?from=groupmessage

前言

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是如何实现的,是否存在安全或者效率的问题,应当如何改进等。

十分钟熟知Gitlab API相关推荐

  1. 典型案例 3:十分钟搭建弹性可扩展的 Web API

    作者 | 萧起 阿里云云原生团队 导读:本节课程主要分为三个部分,基本概念中介绍基于函数计算的 WebAPI 与普通的 WebAPI 的区别及优势:开发流程中介绍如何在函数计算的控制台进行 WebAP ...

  2. 类似零基础学python的小说_零基础小白十分钟用Python搭建小说网站!Python真的强!...

    零基础小白十分钟用Python搭建小说网站!Python真的强!-1.jpg (128.29 KB, 下载次数: 0) 2018-10-8 18:51 上传 Python 和放大镜的二进制代码 人生苦 ...

  3. 十分钟了解分布式计算:GraphX

    GraphX原型论文 GraphX是Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collabora ...

  4. 如何设计登录接口,十分钟内连续登录5次失败,需要等待30分钟才能登录

    正常业务里的实现不能这样搞,合适的方法是走缓存,比如使用redis,我当时就只有原生Java API能用,请大家把这个当成算法题来看待 常言道:字数越短问题越大.   今天阿里的面试官小哥哥让我实现一 ...

  5. erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...

    机器之心发布 机器之心编辑部 百度飞桨的 Paddle Serving 能够实现服务器端快速部署,最近,随着飞桨更新到 1.7 版本,Paddle Serving 也有了新变化.更新后的 Paddle ...

  6. 十分钟教会你原生JS压缩图片,极其精简版

    十分钟教会你原生JS压缩图片,极其精简版 原文链接:https://blog.csdn.net/yasha97/article/details/83629510 (一)实现思路 先通过input标签获 ...

  7. 十分钟,我搞定了一个人物检测模型

    原作:Supervise.ly 铜灵 编译自 Hackernoon 量子位 出品 | 公众号 QbitAI 人物检测确实是个老生常谈的话题了,自动驾驶中的道路行人检测.无人零售中的行为检测.时尚界的虚 ...

  8. 十分钟带你理解Kubernetes核心概念

    原文地址:http://www.dockone.io/article/932 十分钟带你理解Kubernetes核心概念 本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubern ...

  9. 十分钟开发物联网:智能气象站(4G版)

    本文实现的气象站集成了各种常用的气象测量传感器(包含:温度.湿度.气压.紫外线.PM2.5.风速.雨水感应),ShineBlink万能核心板采集这些传感器数据,并将它们上传至机智云,然后我们就可以在远 ...

最新文章

  1. 学会和同事相处的30个原则
  2. python学习书籍推荐-Python语言之6本机器学习书籍推荐
  3. webpack 生成dist,打zip包
  4. (4)Node.js 安装
  5. js ---- 数组操作
  6. 检查用户是否有访问权限
  7. Educational Codeforces Round 41 (Rated for Div. 2)
  8. IDA 7.0在Mojava更新后打不开的问题
  9. word表格删除空白行java_在Word中怎样批量删除空行,这些点主要注意
  10. oracle 如何实现excel的正态分布函数normdist
  11. mysql字符集异常_mysql字符集设置出错问题
  12. 删库跑路?我劝你不要这样。
  13. CCS导入工程时报错“overlaps the location of another project”解决办法
  14. 《流浪方舟》- 废土世界的冒险之旅
  15. 电力系统风力发电机组测控专用隔离变送器
  16. sublime安装和使用
  17. 20175227张雪莹 2018-2019-2 《Java程序设计》第十周学习总结
  18. UOS和Deepin的前世今生
  19. python long类型_python获取当前时间戳Long类型
  20. java毕业设计小说网站mybatis+源码+调试部署+系统+数据库+lw

热门文章

  1. Android 开发培训(04)--Android开发核心(三)
  2. “gcc“ not found
  3. 大话云时代rac_大话Oracle Grid:云时代的RAC
  4. 基于spark的朴素贝叶斯分类器
  5. 计算机伺服系统的作用是,《伺服系统》课程教学大纲.doc
  6. The Road Not Taken
  7. html5+css3学习笔记
  8. 人脸对齐 - ERP 和 LBF
  9. Rational Rose的中间的工具栏消失以及工具栏中没有想要的工具(小人图标,用例图标)
  10. 学习与职业规划——机器学习的学习路径和职业规划(简单版)