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 啦!