基於 Node.js 的輕量「持續集成」工具 CIZE

CIZE 是什麼?

CIZE 是一個「持續集成」工具,但願能讓開發人員更快捷的搭建一個完整、可靠、便捷的 CI 服務。
甚至能夠像 Gulp 或 Grunt 同樣,僅僅經過一個 cizefile.js 便可完成幾乎全部的工做。git

若是您對它有一點興趣,歡迎到 GitHub 加個 star 以關注它。
https://github.com/Houfeng/cizegithub

npm versionBuild Status

https://raw.githubusercontent.com/houfeng/cize/master/screenshot/monitor.png

快速搭建

全局安裝

$ [sudo] npm install cize -g

編寫 Job

新建 cizefile.jsshell

$ mkdir your_path
$ cd your_path
$ vim cizefile.js

輸入以下內容npm

//定義「項目」
const demo = cize.project('demo', {});

//定義一個 Job,這是一個最基礎的 Job
demo.job('hello', function (self) {
  self.console.log('hello world');
  self.done();
});

而後,在「工做目錄」中執行 cize 啓動服務vim

$ cize
Strarting...
The server on "localhost:9000" started

默認會啓動和 CPU 核數相同的「工做進程」。瀏覽器

接下來,能夠在瀏覽器中訪問 http://localhost:9000 ,
並能夠在 UI 中手動觸發這個名爲 hello 的 Job工具

定義 Project

const demo = cize.project('demo', {
  ...
  //能夠在此添加針對項目的配置
  ...
});

注意,即使一個項目不須要任何配置,也不能省略第二個參數,
沒有第二個參數時 cize.project(name) 爲獲取指定的項目gitlab

定義 Job

假定如今已經有一個定義好的名爲 demoprojectui

用 js 編寫的 Job

demo.job('test', function (self) {
  self.console.log('test');
  self.done();
});

這是最基礎的 Job 類型,是其它 Job 類型或「擴展」的基礎。命令行

用 shell 編寫的 Job

demo.job('test', cize.shell(function () {
  /*
    echo "hello world"
  */
}));

定義一個用 SHELL 編寫的 Job,用到了 cize.shell,這是一個「內置擴展」

定時執行的 Job

demo.job('test', cize.cron('* */2 * * * *', cize.shell(function () {
  /*
    echo "hello world"
  */
})));

如上定義了一個每兩分種觸發一次的 Job 而且,嵌套使用了 shell.

監聽其它 Job 的 Job

demo.job('test2', cize.by('test1', function(self){
  self.console.log('hello');
  self.done();
});

以下,在 test1 執行成功後,將會觸發 test2

串行執行的 Job

demo.job('test', cize.series([
  "test1",
  function(self){
    self.console.log('hello');
    self.done();
  },
  "test3"
]));

series 是一個內置擴展,能夠定義一個「串行執行」多個步驟的任務列表,每一個步驟能夠是一個任意類型的 job,
也能夠是指定要調用的其它 Job 的名稱。

並行執行的 Job

demo.job('test', cize.parallel([
  "test1",
  function(self){
    self.console.log('hello');
    self.done();
  },
  "test3"
]));

series 是一個內置擴展,能夠定義一個「並行執行」多個步驟的任務列表,每一個步驟能夠是一個任意類型的 job,
也能夠是指定要調用的其它 Job 的名稱。

多步嵌套的 Job

CIZE 全部的 Job 能夠自由嵌套,例如:

demo.job('test', cize.parallel([
  "test1",
  function(self){
    self.console.log('hello');
    self.done();
  },
  "test3",
  cize.series([
    "test4",
    cize.shell(function(){
      /*
        echo hello
      */
    })
  ])
]));

當你使用一個「外部擴展」時,也能夠混合使用。

編寫一個擴展

如上用到的 cize.shell、cize.series、cize。parallel、cize.cron、cize.by 是 cize 默契認包含的「內置擴展」。
編寫一個「外部擴展」和「內置擴展」並沒有本質區別,以下:

module.exports = function(options...){
  return function(self){
    //處理邏輯
  };
};

如查須要在 Job 定義時進行一些處理,能夠使用 register ,以下

module.exports = function(options...){
  return {
    register: function(Job){
      //Job 是你的「自定義 Job 類型」
      //註冊時邏輯
    },
    runable: function(self){
      //執行時邏輯
    }
  };
};

能夠將擴展發佈爲一個「npm 包」,讓更多的人使用。

服務選項

能夠經過一些選擇去控制 CI 服務的端口、密鑰等,有兩種方式,以下

在 cizefile.js 中配置

cize.config({
  port: 9000,
  secret: '12345'
});

經過命令行工具

cize ./ -p=port -s=secret

經過 cize -h 能夠查看完整的說明

Usage:
  cize [folder|file] [options]

Options:
  -w   set the number of workers
  -p   set the port
  -s   set the secret
  -h   display help information

Example:
  cize ./ -p=9000 -s=12345 -w=4

更多內容

請訪問 wiki: https://github.com/Houfeng/cize/wiki

若是您對它有一點問題或建議,請到 GitHub 經過 issue 提出您的疑問或建議。https://github.com/Houfeng/cize-gitlab/issues

相關文章
相關標籤/搜索