基于 Node.js 的轻量「持续集成」工具 CIZE - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
houfeng

基于 Node.js 的轻量「持续集成」工具 CIZE

  •  
  •   houfeng 2016 年 7 月 21 日 3005 次点击
    这是一个创建于 3564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CIZE 是什么?

    CIZE 是一个「持续集成」工具,希望能让开发人员更快捷的搭建一个完整、可靠、便捷的 CI 服务。 甚至可以像 Gulp 或 Grunt 一样,仅仅通过一个 cizefile.js 即可完成几乎所有的工作。

    如果您对它有一点兴趣,欢迎到 GitHub 加个 star 以关注它。 https://github.com/Houfeng/cize

    npm versionBuild Status

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

    快速搭建

    全局安装

    $ [sudo] npm install cize -g 

    编写 Job

    新建 cizefile.js

    $ mkdir your_path $ cd your_path $ vim cizefile.js 

    输入如下内容

    //定义「项目」 const demo = cize.project('demo', {}); //定义一个 Job ,这是一个最基础的 Job demo.job('hello', function (self) { self.console.log('hello world'); self.done(); }); 

    然后,在「工作目录」中执行 cize 启动服务

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

    默认会启动和 CPU 核数相同的「工作进程」。

    接下来,可以在浏览器中访问 http://localhost:9000 , 并可以在 UI 中手动触发这个名为 hello 的 Job

    定义 Project

    const demo = cize.project('demo', { ... //可以在此添加针对项目的配置 ... }); 

    注意,即便一个项目不需要任何配置,也不能省略第二个参数, 没有第二个参数时 cize.project(name) 为获取指定的项目

    定义 Job

    假定现在已经有一个定义好的名为 demoproject

    用 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

    4 条回复    2016-07-21 11:28:12 +08:00
    xujialiang
        1
    xujialiang  
       2016 年 7 月 21 日
    Nice
    v1024
        2
    v1024  
       2016 年 7 月 21 日 via iPhone
    楼主,什么是持续集成?
    acthtml
        3
    acthtml  
       2016 年 7 月 21 日
    已星。

    这个能跟 gitlab 打通不,给点提示。
    houfeng
        4
    houfeng  
    OP
       2016 年 7 月 21 日
    @acthtml 可以,我正在写一个 gitlab 的插件,同时也会尽快将相关 API 文档写好,这样大家就能更容易的随意把玩了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1998 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 16:13 PVG 00:13 LAX 09:13 JFK 12:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86