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

时间:2021-08-18 22:05:02

CIZE 是什么?

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

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

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

https://github.com/Houfeng/cize

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

基于 Node.js 的轻量「持续集成」工具 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. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

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

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

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

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

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

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

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

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

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

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

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

  9. Pomelo:网易开源基于 Node.js 的游戏服务端框架

    Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese

随机推荐

  1. C语言中链表任意位置怎么插入数据?然后写入文件中?

    链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便. 插入某个学号后面图: 定义的结构体: struct student { ]; //学生学号 ]; //学生姓名 ...

  2. Know How To Use ID_NULL Function To Search An Object In Oracle Forms

    ID_NULL built in function is used to determine that an object type variable is null or not null in O ...

  3. 【转】SQLServer XML类型

    SQL Server从2005起开始支持xml类型,这个数据类型对于后期的改变非常有用.一对多的关系在后期变成了多对多的关系,XML类型就是一个不错的选择. 1.创建测试数据 创建表 --创建表,包含 ...

  4. oc-15-匿名对象

    /** 匿名对象 1.访问成员变量--->只能给成员变量设置值,只能成功1次,每次都是新的对象. 2.调用方法时类似类方法: 跟类方法区别:匿名对象创建对象了,开辟空间了. */ #import ...

  5. [RxJS] Toggle A Stream On And Off With RxJS

    This lesson covers how to toggle an observable on and off from another observable by showing how to ...

  6. ftpclient卡死问题

    ftpclient在调用retrieveFileStream(String remote)之后,返回inputstream,如果不想关闭ftp,继续读取其他文件. 一定要先关闭inputstream, ...

  7. API通用设计原则

    什么是好的API? ·        完备(Be Complete) 对确定重点支持的用户场景具有完备的功能支持.就是说,用户通过对一组API的调用能够完成预期的功能. ·        不冗余(Be ...

  8. 【HELLO WAKA】WAKA iOS客户端 之一 APP分析篇

    由于后续篇幅比较大,所以调整了内容结构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 APP分析篇 [HELLO WAKA]WAKA iOS客户端 之二 架构设计与实现篇 [HELL ...

  9. 【机器学习】人工神经网络ANN

    神经网络是从生物领域自然的鬼斧神工中学习智慧的一种应用.人工神经网络(ANN)的发展经历的了几次高潮低谷,如今,随着数据爆发.硬件计算能力暴增.深度学习算法的优化,我们迎来了又一次的ANN雄起时代,以 ...

  10. 新概念英语(1-1)Excuse me!

    Excuse me!Whose handbag is it? A:Excuse me! B:Yes? A:Is this your handbag? B:Pardon? A:Is this your ...