gitlab是一个类似于 github 的配置管理服务, 相较于 github,gitlab 更加专业,有更多的 webhook 和 api,以及更强大的持续集成(ci)服务。
我们可以通过 webhook 或者 api 来触发 ci,配合 gulp 等工具,以此来构建更加完整的自动化工作流。
本文将带你初步学会使用 gitlab api,更多深入使用请参考官方文档 。
准备
首先,对于我们需要通过 api 触发的项目 IDE
,来到项目页面,顺序点击图中 1.
、2.
、3.
然后就能打开添加 trigger 的页面,描述完 trigger 的用途后点击 add trigger
按钮就能生成我们的 token,我们需要使用此 token 来触发 ci。
然后我们就能通过以下命令来触发 ci。
curl -X POST -F token=TOKEN -F ref=REF_NAME https://gitlab.example.com/api/v4/projects/project_id/trigger/pipeline
如果你打开的页面与图片不同,可能是你没有该项目的权限,那你需要找同事帮你搞一个 token ,以及上面这条命令。
上述内容中我们需要将TOKEN
替换为 我们自己的 token,将 REF_NAME
替换为目标分支名,则将在该目标分支上触发 ci。
其中 https://gitlab.example.com/api/v4/projects/project_id/trigger/pipeline
是打开上述设置页面自动生成的,不需要我们修改,不同项目的连接不同。
如果想给 ci 传入环境变量,可通过以下方式。
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 啦!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。