CIZE 是什么?

CIZE 是一个「持续集成」工具,希望能让开发人员更快捷的搭建一个完整、可靠、便捷的 CI 服务。

甚至可以像 Gulp 或 Grunt 一样,仅仅通过一个 cizefile.js 即可完成几乎所有的工作。

如果您对它有一点兴趣,欢迎到 GitHub 加个 star 以关注它。

https://github.com/Houfeng/cize

快速搭建

全局安装

$ [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

基于 Node.js 的轻量「持续集成」工具 CIZE的更多相关文章

  1. 8 步搭建 Node.js + MongoDB 项目的自动化持续集成

    任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...

  2. fir.im weekly - 「 持续集成 」实践教程合集

    我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...

  3. Drone-比Jenkins更轻量化的持续集成部署工具

    Drone 简介 Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,由GO语言编写,可用于自动化测试与构建,甚至发布.每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控 ...

  4. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...

  5. 基于node.js人脸识别之人脸对比

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  6. Vue.js:轻量高效的前端组件化方案

    转发一篇尤老师对vue.js的介绍,了解vue.js的来龙去脉.不过现在已经是2.0了,也有添加一些新的东西,当然有些东西也改了. Vue.js:轻量高效的前端组件化方案 Vue.js 是我在2014 ...

  7. 基于 Node.js 的服务器自动化部署搭建实录

    基于 Node.js 的服务器自动化部署搭建实录 在服务器上安装 Node.js 编写拉取仓库.重启服务器脚本 配置 Github 仓库的 Webhook 设置 配置 Node.js 脚本 其他问题 ...

  8. NodeBB – 基于 Node.js 的开源论坛系统

    NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...

  9. 基于 Node.js 平台,快速、开放、极简的 web 开发框架。

    资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...

随机推荐

  1. php面向对象中public与var的区别

    public和var的作用差不多 因为 var定义的变量如果没有加protected 或 private则默认为public php4 中一般是用 varphp5 中就一般是用 public了 现在基 ...

  2. 用JDK自带的监控工具jconsole来监控程序运行

    工具目录:C:\Program Files\Java\jdk1.6.0_06\bin\jconsole.exe 效果如下:监控类ThreadPoolExecutorTest 的运行 选择我们运行的程序 ...

  3. [笔记]用gdb调试core dump

    总是隔一段时间才写一次C++,有些东西老是用完就忘了……记一下如何用gdb来调试core dump免得到时候又忘记. 首先需要设置core file的大小,默认是0所以不设不会生成core file ...

  4. 作死自救日记——不小心修改linux下/etc/sudoers权限的解决办法

    作死自救日记,献给跟我一样不小心作了死的人 ================================================ 今天不小心作死修改了/etc/sudoers的权限,作死命 ...

  5. Java实现web在线预览office文档与pdf文档实例

    https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...

  6. NBUT 1221 Intermediary

    最短路,三进制状态压缩. $dis[i][j]$表示到$i$节点,每个中介用了几次的情况下的最小花费,跑最短路即可. #include<cstdio> #include<cstrin ...

  7. 洛谷P0248 [NOI2010] 超级钢琴 [RMQ,贪心]

    题目传送门 超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符 ...

  8. Linux中用户与组相关配置文件(整理)

    用户与组信息存放位置 说明 注释 /etc/passwd 存放用户基本信息 记录了每个用户的一些基本属性,并对所有用户可读,每一行记录对应一个用户,属性之间通过冒号分隔. 每一个行6个冒号,7个属性. ...

  9. Python协程(上)

    几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...

  10. BZOJ1007 水平相交直线

    按照斜率排序,我们可以想象如果你能看到大于等于三条直线那么他一定会组成一个下凸包,这样我们只需要判断如果当前这条直线与栈顶第二直线相交点相比于栈顶第二直线与栈顶直线相交点靠左那么他就不满足凸包性质. ...