使用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

相關文章
相關標籤/搜索