基于GitLab API实现自动化任务
背景
之前在团队里基于git、maven、nexus、jenkins搭建适合中小型技术团队的CI平台,这套系统运行近一年,整体来说还是比较稳定可靠,使用起来也比较方便,基本解决了中小规模团队的CI需求。
但有个功能一直未完善,使用起来略有不便,就是自动打tag,因我们的build和部署是采用了两套jenkins去实现,而在部署环节的jenkins,是不需要和git交互的,因此也不方便使用类似:git tag
这样的命令去完成自动打tag的功能。
因此首先想到的解决方案便是在部署机上通过插件或CURL等方式去调用gitlab的一个api,这样应该能够解决这个问题。
实现
研究了下gitlab的官方文档,发现确实有提供相关API来进行tag的创建,除此之外,还提供了很多其他API,足够你实现很多方便的功能。
授权
调用api都需要使用一个gitlab账号的private token,每个git账号都有不同的private token,查看方法: 登录gitlab,进入Profile Setting — Account,可以看到如下界面:
这个token可以通过header或者query string方式加到调用请求里。
调用API
以创建tag为例,其api形式如下:
POST /projects/:id/repository/tags
其中参数id可以通过另一接口获取:
GET /projects
传入必须的参数后,gitlab会返回类似于如下的消息,则说明创建tag成功:
{
"name": "test",
"message": null,
"commit": {
"id": "7cdbfcf12de62dae7fef5ad7eac6b41ab6d04ad9",
"message": "Merge branch 'weixin' into develop\n",
"parent_ids": [
"82e05eb5e681f46810b6e113140bc8577ee0ec64",
"bb2c9646608196eaf4fb5b9b39b5f74bfd9df9b1"
],
"authored_date": "2016-05-30T18:06:53.000+08:00",
"author_name": "test",
"author_email": "qiuliang@sohochina.com",
"committed_date": "2016-05-30T18:06:53.000+08:00",
"committer_name": "test",
"committer_email": "qiuliang@sohochina.com"
},
"release": null
}
部署成功后调用api
直接基于jenkins提供的后置脚本功能即可,首先增加全局环境变量配置:GIT_API_TOKEN,其余参数可以为每个project进行配置。
shell代码如下:
curl -X POST \
--header "PRIVATE-TOKEN: $GIT_API_TOKEN" \
--data "tag_name=$Version&ref=$Tag_Ref&release_description=$Tag_Desc" \
http://code.gitlab.com/api/v3/projects/1/repository/tags
完成以上配置,在每次部署成功后都会调用gitlab的api自动创建tag。