gitlab是一个相似于 github 的配置管理服务, 相较于 github,gitlab 更加专业,有更多的 webhook 和 api,以及更强大的持续集成(ci)服务。html
咱们能够经过 webhook 或者 api 来触发 ci,配合 gulp 等工具,以此来构建更加完整的自动化工做流。git
本文将带你初步学会使用 gitlab api,更多深刻使用请参考官方文档 。github
首先,对于咱们须要经过 api 触发的项目 IDE
,来到项目页面,顺序点击图中 1.
、2.
、3.
web
而后就能打开添加 trigger 的页面,描述完 trigger 的用途后点击 add trigger
按钮就能生成咱们的 token,咱们须要使用此 token 来触发 ci。gulp
而后咱们就能经过如下命令来触发 ci。api
curl -X POST -F token=TOKEN -F ref=REF_NAME https://gitlab.example.com/api/v4/projects/project_id/trigger/pipeline
若是你打开的页面与图片不一样,多是你没有该项目的权限,那你须要找同事帮你搞一个 token ,以及上面这条命令。bash
上述内容中咱们须要将TOKEN
替换为 咱们本身的 token,将 REF_NAME
替换为目标分支名,则将在该目标分支上触发 ci。curl
其中 https://gitlab.example.com/api/v4/projects/project_id/trigger/pipeline
是打开上述设置页面自动生成的,不须要咱们修改,不一样项目的链接不一样。工具
若是想给 ci 传入环境变量,可经过如下方式。gitlab
curl -X POST -F token=TOKEN -F ref=REF_NAME "variables[v_toolkit]=${version}" https://gitlab.example.com/api/v4/projects/project_id/trigger/pipeline
而后在咱们的代码中经过如下方式获取环境变量:
console.log(`process.env.v_toolkit: ${process.env.v_toolkit}`)
经过环境变量,咱们还能控制只触发 ci 中特定的 job,而绕过其余的 job。
须要注意的是,经过 api 的方式是不能触发须要手动触发的 job 的,因此咱们能够不将 job 设为手动触发,而是经过传入环境变量,来触发 ci 中特定的 job。
咱们能够经过 gulp 脚原本触发 ci
// gulpfile.js const path = require('path') const cp = require("child_process") const gulp = require('gulp') function runci(cb) { const versionIndex = process.argv.indexOf('--ve') const version = process.argv[versionIndex + 1] const branchIndex = process.argv.indexOf('--br') const branch = process.argv[branchIndex + 1] console.log(`version: ${version}`) console.log(`branch: ${branch}`) cp.execSync(`curl -X POST -F token=你的TOKEN -F "ref=${branch}" -F "variables[v_transformer]=${version}" https://gitlab.example.cn/api/v4/projects/1234/trigger/pipeline`) cb() } module.exports = { runci }
命令行运行:
npx gulp runci --ve 1.0.0 --br master
就能够触发 ci 啦!