使用gitlab api触发ci

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

咱们能够经过 webhook 或者 api 来触发 ci,配合 gulp 等工具,以此来构建更加完整的自动化工做流。git

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

准备

首先,对于咱们须要经过 api 触发的项目 IDE,来到项目页面,顺序点击图中 1.2.3.web

image-20200615204733718.png

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

image-20200615205600028.png

而后咱们就能经过如下命令来触发 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 啦!

image-20200615212814918.png

相关文章
相关标签/搜索