CIZE 是一個「持續集成」工具,但願能讓開發人員更快捷的搭建一個完整、可靠、便捷的 CI 服務。
甚至能夠像 Gulp 或 Grunt 同樣,僅僅經過一個 cizefile.js
便可完成幾乎全部的工做。git
若是您對它有一點興趣,歡迎到 GitHub 加個 star 以關注它。
https://github.com/Houfeng/cizegithub
$ [sudo] npm install cize -g
新建 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工具
const demo = cize.project('demo', { ... //能夠在此添加針對項目的配置 ... });
注意,即使一個項目不須要任何配置,也不能省略第二個參數,
沒有第二個參數時 cize.project(name)
爲獲取指定的項目gitlab
假定如今已經有一個定義好的名爲 demo
的 project
ui
demo.job('test', function (self) { self.console.log('test'); self.done(); });
這是最基礎的 Job 類型,是其它 Job 類型或「擴展」的基礎。命令行
demo.job('test', cize.shell(function () { /* echo "hello world" */ }));
定義一個用 SHELL 編寫的 Job,用到了 cize.shell,這是一個「內置擴展」
demo.job('test', cize.cron('* */2 * * * *', cize.shell(function () { /* echo "hello world" */ })));
如上定義了一個每兩分種觸發一次的 Job 而且,嵌套使用了 shell.
demo.job('test2', cize.by('test1', function(self){ self.console.log('hello'); self.done(); });
以下,在 test1 執行成功後,將會觸發 test2
demo.job('test', cize.series([ "test1", function(self){ self.console.log('hello'); self.done(); }, "test3" ]));
series 是一個內置擴展,能夠定義一個「串行執行」多個步驟的任務列表,每一個步驟能夠是一個任意類型的 job,
也能夠是指定要調用的其它 Job 的名稱。
demo.job('test', cize.parallel([ "test1", function(self){ self.console.log('hello'); self.done(); }, "test3" ]));
series 是一個內置擴展,能夠定義一個「並行執行」多個步驟的任務列表,每一個步驟能夠是一個任意類型的 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 服務的端口、密鑰等,有兩種方式,以下
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