文档章节

Gitlab的API调用

o
 osc_0atwpkmx
发布于 07/01 11:20
字数 1372
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

1.概述

Gitlab作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过Gitlab的都知道,想要提交一段代码,可以通过git push提交到远程仓库,也可以直接在Gitlab平台上修改提交。然而上述两种提交方式都是人工提交代码,需要手动登录Gitlab或者在第一次commit的时候提供Gitlab帐号和密码。

那么,假设有这么一个需求场景:我们开发了一个效率平台,可以自动拉分支、自动提交代码到远程仓库。这个需求该如何实现?其实很简单,Gitlab提供了一套完整的API,让第三方平台可以通过API自动创建帐号、自动提交代码、自动拉分支,等等。API涉及到的功能非常全面,覆盖了分支、tag、代码提交、用户、群组、项目等,基本上人工可以做的所有操作,都可以通过API自动实现。

Gitlab的Api的文档入口为http://{gitlab_host}/help/api/README.md

2.技术要点

Gitlab本质上也是一个web服务器,Gitlab官方提供了一个非常完整的restful API,我们可以使用apache开发的一个工具包HttpClient,HttpClient可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

当我们想要执行某种操作时,我们只需要在Gitlab的api文档上查找到对应的路径,然后在自己的后台利用HttpClient将对应的链接发送至Gitlab服务器即可,HttpClient功能非常强大,支持get,post,put,delete等七种请求方式。

附录一个讲解HttpClient非常完善的链接:http://www.yeetrack.com/?p=779;

3.使用HttpClient完成一次请求

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。

1.创建HttpClient对象。
2.创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3.如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4.调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5.调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6.释放连接。无论执行方法是否成功,都必须释放连接。




Get请求使用方法:

    public static String httpGet(String url) throws Exception {

        CloseableHttpClient httpclients = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpclients.execute(httpGet);
        HttpEntity httpEntity = response.getEntity();

        try{
            HttpEntity entity = response.getEntity();
            if(entity != null) {
                InputStream is = entity.getContent();
            }
        }finally{
            response.close();
    }

    return EntityUtils.toString(httpEntity,"UTF-8");

}

 

Post请求示例如下:

public static String httpPost(String url,List<NameValuePair> formparams) throws Exception {
    CloseableHttpClient httpclients = HttpClients.createDefault();

    HttpPost httpPost = new HttpPost(url);

    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,Consts.UTF_8);

    httpPost.setEntity(entity);
    CloseableHttpResponse response = httpclients.execute(httpPost);
    HttpEntity entity1 = response.getEntity();

    try{
        HttpEntity entity5 = response.getEntity();
        if(entity != null) {
            InputStream is = entity.getContent();
        }
    }finally{
        response.close();
    }

    return EntityUtils.toString(entity1);

}

 

4.身份认证

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

{"message":"401 Unauthorized"}
  • 1

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

获得private_token的方式有两种:

方法一:查看帐号设置(Profile Settings->Account)。如下图:
这里写图片描述

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

5.操作Gitlab的实例

@Test
    //新建项目
    public void post1() throws Exception {
        String url = "http://192.168.124.46/api/v3/projects";

    List<NameValuePair> formparams = new ArrayList <NameValuePair>();
    //新建项目大约有20个参数可以设置
    formparams.add(new BasicNameValuePair("private_token", "2W6HbdQc4NuVbgTaz1hW"));
    formparams.add(new BasicNameValuePair("private_token", "rTRdYCbqDpPNxttpE8ox"));
    formparams.add(new BasicNameValuePair("email", "643216160@qq.com"));
    formparams.add(new BasicNameValuePair("password", "aaaasasasas"));
    formparams.add(new BasicNameValuePair("reset_password", "true"));
    formparams.add(new BasicNameValuePair("username", "lishuwang"));
    formparams.add(new BasicNameValuePair("name", "wangzai"));
    formparams.add(new BasicNameValuePair("skype", "qwqw"));
    formparams.add(new BasicNameValuePair("linkedin", "qwwq"));


    System.out.println(Utils.httpPost(url, formparams));

}

//查询当前用户的某个项目
@Test
public void httpGet2() throws Exception {
    //变量为项目id
    String url = "http://192.168.121.215/api/v3/projects/49?private_token=L9C8yBBwYxvRBxLxF2ge";
    String entity = Utils.httpGet(url);
    System.out.println(entity);
}

 

6.总结

对Gitlab进行二次开发实际上就是通过HttpClient工具类来代替我们发送请求给Gitlab服务器,而不需要我们自己再手动访问Gitlab网页来进行操作。原理和思路并不难理解。其中要注意的就是使用HttpClient发送请求时需要携带一个private_token的参数过去,每个用户都有一个唯一的私人令牌,此令牌作为用户的唯一标识,Gitlab给我们提供了一个通过用户名和密码来专门获取此private_token的api,当然身份验证的方式不仅仅有这一种,还有OAuth2令牌和个人访问令牌的方式都可以。

 
o
粉丝 0
博文 67
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
GitLab Shell如何通过SSH工作

转自:https://wayjam.me/post/how-gitlab-shell-works-with-ssh.md GitLab访问Git仓库 首先回顾GitLab的Git仓库四种访问方式: git pull over http -> gitlab-rails (Authorization) -> ac......

osc_n1z6bj15
2019/02/27
7
0
阿里云CentOS 6.4搭建Gitlab 6.4(源码安装)

为了便于Gitlab的后期升级,必须采用源码安装。同步更新在私人博客 官方只对ubuntu系统提供了源码安装说明,CentOS系统的安装采用了以下教程: CentOS安装Gitlab 安装过程比较繁琐,但是按照...

lubia
2014/01/17
3.8K
0
GitLab 自动触发 Jenkins 构建

GitLab 自动触发 Jenkins 构建 在 Jenkins 中安装插件 选择 系统管理 -> 管理插件 打开插件管理也页面,如下图: 在 可选插件 中选择 Gitlab Hook Plugin 和 GitLab Plugin 等插件,然后点击...

osc_uwnmtz9n
2019/09/25
9
0
源码安装gitlab

GitLab服务构成 GitLab由以下服务构成: nginx:静态Web服务器 gitlab-shell:用于处理Git命令和修改authorized keys列表 gitlab-workhorse:轻量级的反向代理服务器 logrotate:日志文件管理...

cptao
2019/05/23
0
0
源码安装gitlab

GitLab服务构成 GitLab由以下服务构成: nginx:静态Web服务器 gitlab-shell:用于处理Git命令和修改authorized keys列表 gitlab-workhorse:轻量级的反向代理服务器 logrotate:日志文件管理...

osc_9eqghyd8
2019/05/23
1
0

没有更多内容

加载失败,请刷新页面

加载更多

JDK1.8新特性(六):Stream的终极操作,轻松解决集合分组、汇总等复杂操作

点击上方“程序猿技术大咖”,关注加群讨论 前期回顾: JDK1.8新特性(一):JDK1.8究竟有哪些新特性呢 JDK1.8新特性(二):为什么要关注JDK1.8 JDK1.8新特性(三):Lambda表达式,让你爱不释手 ...

xcbeyond
06/27
25
0
撤销本地提交-每天三分钟玩转Git (5)

“ 让我们来偷偷diss老板。——编程三分钟” 第 5 篇 撤销本地提交 上一章我们一起入门学习了git的基本概念和git基础操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存...

编程三分钟
2019/05/08
6
0
As-rigid-as possible shape manipulation:优化1——Igarashi09论文勘误

上篇论文,我说到了改进05年Siggraph论文 “As-rigid-as-possible shape manipulation”[2]的09年论文[1]。该论文做了一定的改进,使算法更通用,更简洁,更好懂[1]。 但是这篇论文中出现了很...

无雨森
2019/06/27
0
0
学java需要花多少钱,怎么才能学好java?

--图片来源百度 随着互联网的火爆,越来越多人加入java的大家庭中,然而很多初学者对如何学习和学习曲线不太了解,在这里抒发个人见解。 学java需要花多少钱 单单的学java不需要花钱。花不花...

bigsai
2019/06/15
12
0
09-01 面向对象编程

一 对象的概念 ![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191010170736333-1924266964.jpg) ”面向对象“的核心是“对象”二字,而对象的精髓在于“整合“,什么意思?...

osc_7ludm6s2
27分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部