CIZE:像 Gulp 一样搭建一个 CI 服务

CIZE 是什么?

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


快速搭建

全局安装

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

路线图

  • 所有 Job 都在单儿独立在一个进程中执行(现在可能会有 n 个 job 共用一个主进程)
  • 集成 Docker
时间: 2024-09-30 18:48:34

CIZE:像 Gulp 一样搭建一个 CI 服务的相关文章

利用OpenStreetMap(OSM)数据搭建一个地图服务

图 利用OSM数据简单发布的北京地图服务   一.OSM是什么        开放街道图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图(wiki:http://wiki.openstreetmap.org/wiki/Main_Page).尤其值得称道的是,osm数据开源,可以自由下载使用. 二.OSM数据结构        OpenStreetMap包括空间数据以及属性数据.其中空间数据主要包括三种:点(Nodes).路(Way

如何搭建一个HTTPS服务端

关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端. 服务端的 HTTPS HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输的安全,从去年苹果的强制 HTTPS ,到如今各大网站都支持了 HTTPS.它会越来越普及. 之前写过几篇关于 HTTPS 原理的文章,有用户留言希望了解一些如何在服务端搭建 HTTPS 服务的内容,这次就和大家聊聊这个话题. SSL 证书 搭建一个 HTTPS 站点,第一步要做的就是申请 SSL

Moving to Docker(二)搭建一个私有registry服务

本文讲的是Moving to Docker(二)搭建一个私有registry服务,[编者的话]本文是<Moving to Docker>系列的第二篇,这个系列的文章讲述了创业公司如何把基础服务迁移到Docker上,以及迁移过程中的经验教训.本文主要介绍了如何安装.测试和使用私有registry服务,其中也包含了从DigitalOcean选VPS和注册Amazon S3服务. 这是迁移到Docker系列的第二篇,整个系列都是介绍我们公司是如何把基础设施从PaaS迁移到Docker的. 第一篇:介

基于Nginx搭建一个安全的、快速的微服务架构

本文讲的是基于Nginx搭建一个安全的.快速的微服务架构[编者的话]本文改编自Chris Stetson发表在nginx.conf 2016上的一个有关如今的微服务以及如何使用Nginx构建一个快速的.安全的网络系统的演讲,大家可以在YourTube上回看此次演讲. 0:00 - 自我介绍 Chris Stetson:Hi,我的名字是Chris Stetson,我在Nginx带领专业服务部门,同时也领导微服务实践. 今天我们要谈论微服务以及如何使用Nginx构建一个快速的.安全的网络系统.在我们

vpn-我在国外的一台机器亚马逊AWS EC2上搭建了 一个VPN服务,用国内的网络去访问,显示超时。

问题描述 我在国外的一台机器亚马逊AWS EC2上搭建了 一个VPN服务,用国内的网络去访问,显示超时. 日志如图所示 解决方案 这种服务,早就被墙了,没有做混淆的服务,基本连一天都用不了 解决方案二: 请教大神,也就是说企图用这种方式进行翻墙是不可行的啦? 解决方案三: http://www.fj.xinhuanet.com/2015-01/28/c_1114164074.htm

配置-关于在Azure搭建一个完整的Java web项目的步骤并和azure各种服务集成

问题描述 关于在Azure搭建一个完整的Java web项目的步骤并和azure各种服务集成 如何把java web项目和azure提供的服务进行集成,有哪些配置?能不能提供教程 解决方案 最简单的当然是使用虚拟机服务,使用一个你熟悉的操作系统,比如ubuntu server.cent os或者windows server,然后用ssh.ps或者remote desktop登录进去.你原先怎么部署,现在还是怎么部署,一点都没有变化. 解决方案二: HiAzur官网提供了一些关于java开发的文档

在阿里云容器服务上,轻松搭建Concourse CI

Concourse CI是一款CI/CD工具,它的魅力在于极简设计,被广泛应用于Cloud Foundry各个模块的CI/CD.阿里云也推出了CI工具CodePipeline,开箱即用,推荐试用. Concourse CI官方提供了标准的Docker镜像,在阿里云容器服务部署一套 Concourse CI应用是很轻松的一件事儿. 准备Docker集群 首先,在阿里云容器服务控制台创建一个集群.简单起见,这里节点数为1,网络类型为经典网络. 集群创建过程大约几分钟,成功后的状态如下图: 然后需要开

oss php sdk+laravel搭建一个简单网站

背景 目前中小型网站最流行的还是采用php搭建自己的web服务器,一个web服务器都会做动静资源分离,静态资源流量小的话,静态文件可以统一放单独目录用域名独立访问,流量稍大的时候,可以直接托管到阿里云OSS上,需要静态资源时从oss拉取,对请求延时苛刻的还可以用CDN做缓存和加速. 目的 介绍如何如何在30分钟内搭建一个简单的web服务器,采用nignx+php-fpm+laravel+oss-php-sdk 框架 ,静态资源托管到阿里云oss上.实现通过浏览器展示一张图片. 简单的服务器框图

如何快速搭建一个完整的移动直播系统?

移动直播行业的火热会在很长一段时间内持续,通过和各行业的整合,从而成为具有无限可能性的行业.主要因为以下三个原因:   第一,移动直播的UGC生产模式比PC端的直播更明显,人人都有设备,随时随地开播,完全顺应了互联网时代的开放性原则,能刺激更多人去创造和传播优质内容.   第二,网络带宽和速度在逐渐提高,网络成本在逐渐下降,为移动直播提供一个极佳的发展环境.文字.声音.视频.游戏等都会在移动直播中呈现,创造出更加丰富的用户体验.直播可以以SDK的形式接入到自己的应用中,比如,教育领域中的课后辅导