使用gitlab api触发ci

gitlab是一个类似于 github 的配置管理服务, 相较于 github,gitlab 更加专业,有更多的 webhook 和 api,以及更强大的持续集成(ci)服务。

我们可以通过 webhook 或者 api 来触发 ci,配合 gulp 等工具,以此来构建更加完整的自动化工作流。

本文将带你初步学会使用 gitlab api,更多深入使用请参考官方文档

准备

首先,对于我们需要通过 api 触发的项目 IDE,来到项目页面,顺序点击图中 1.2.3.

image-20200615204733718.png

然后就能打开添加 trigger 的页面,描述完 trigger 的用途后点击 add trigger 按钮就能生成我们的 token,我们需要使用此 token 来触发 ci。

image-20200615205600028.png

然后我们就能通过以下命令来触发 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 啦!

image-20200615212814918.png

你可能感兴趣的:(javascript,gitlab,github,ci,gulp)