Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Houfeng/cize
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0.0.20
Choose a base ref
...
head repository: Houfeng/cize
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 2,203 additions and 600 deletions.
  1. +2 −1 .gitignore
  2. +2 −1 .npmignore
  3. +11 −0 .travis.yml
  4. +15 −0 HISTORY.md
  5. +178 −44 README.md
  6. +42 −65 bin/cli.js
  7. +4 −0 bin/consts.js
  8. +17 −0 bin/help.txt
  9. +45 −0 bin/invoker.js
  10. +83 −0 bin/master.js
  11. +39 −0 bin/starter.js
  12. +38 −0 bin/worker.js
  13. +4 −32 demo/app.js
  14. +7 −7 demo/cizefile.js
  15. BIN design/logo.jpg
  16. +9 −6 lib/by.js
  17. +67 −8 lib/context.js
  18. +3 −3 lib/cron.js
  19. +199 −37 lib/job.js
  20. +8 −17 lib/parallel.js
  21. +46 −26 lib/project.js
  22. +6 −17 lib/series.js
  23. +114 −26 lib/server.js
  24. +10 −5 lib/shell.js
  25. +66 −22 lib/store.js
  26. +8 −2 lib/utils.js
  27. +29 −19 package.json
  28. +81 −0 test/by.test.js
  29. 0 test/context.test.js
  30. +20 −0 test/index.test.js
  31. +185 −0 test/job.test.js
  32. +65 −0 test/parallel.test.js
  33. +98 −0 test/project.test.js
  34. +65 −0 test/series.test.js
  35. +124 −7 test/server.test.js
  36. +57 −0 test/shell.test.js
  37. +11 −3 web/common/utils.js
  38. +0 −3 web/config.development.json
  39. +1 −0 web/config.development.yaml
  40. +0 −37 web/config.json
  41. +0 −1 web/config.production.json
  42. 0 web/config.production.yaml
  43. +39 −0 web/config.yaml
  44. +281 −0 web/controllers/api.js
  45. +4 −41 web/controllers/main.js
  46. +0 −33 web/controllers/setting.js
  47. +0 −35 web/controllers/trigger.js
  48. +17 −4 web/filters/auth.js
  49. +1 −46 web/global.js
  50. +1 −1 web/locales/en.json
  51. +1 −1 web/locales/zh-hk.json
  52. +1 −1 web/locales/zh-sg.json
  53. +1 −1 web/locales/zh-tw.json
  54. +1 −1 web/locales/zh.json
  55. +84 −35 web/public/js/main.js
  56. +4 −4 web/views/console.html
  57. +4 −4 web/views/main.html
  58. +1 −0 web/views/master.html
  59. +3 −3 web/views/record.html
  60. +1 −1 web/views/trigger.html
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -4,4 +4,5 @@ jsconfig.json
node_modules/
coverage/
demo/data
demo/works
demo/works
test/workspace
3 changes: 2 additions & 1 deletion .npmignore
Original file line number Diff line number Diff line change
@@ -5,4 +5,5 @@ node_modules/
coverage/
demo/data
demo/works
screenshot/
screenshot/
test/workspace
11 changes: 11 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
env:
- CXX=g++-4.8
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
language: node_js
node_js:
- "4"
15 changes: 15 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
### 0.3.2
1. 重写 CLI 逻辑
2. 支持强制在「独立进程」中执行 Job
3. 增加用 CLI 执行 Job

### 0.1.8
1. Job.beforeRun 支持异步方式
2. 修复清理后的标准输出合并 Bug

### 0.1.6
1. 改进父子 Job 标准输入合并
2. 改进内置扩展 cize.by/cize.series/cize.parallel
3. 改进针对 cizefile 的 watch 和 reload
4. 添加 Job.afterRun
5. 手动触发参数支持 YAML 格式
222 changes: 178 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,81 +1,215 @@

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

[![npm version](https://badge.fury.io/js/cize.svg)](http://badge.fury.io/js/cize)
[![Build Status](https://travis-ci.org/Houfeng/cize.svg?branch=master)](https://travis-ci.org/Houfeng/cize)

<img src="https://raw.githubusercontent.com/houfeng/cize/master/screenshot/monitor.png" width="888"/>

# 快速搭建
#### 安装 CIZE
### 全局安装
```sh
$ sudo install cize -g
$ [sudo] npm install cize -g
```

#### 新建 cizefile 添加 JOB
### 编写 Job

新建一个 cizefile.js
新建 cizefile.js
```
$ mkdir cize_workspace
$ cd cize_workspace
$ mkdir your_path
$ cd your_path
$ vim cizefile.js
```

输入如下内容
```js
/**
* 配置服务,可以指定「端口」、「密钥」、「工作目录」等
* port:端口,默认为 9000
* secret:密且,默认没启用,启用后登录「WEB 版监视界面」需要提供
* workspace:工作目录,默认为 cizefile.js 所在目录
**/
cize.config({
port: 9000,
secret: '12345',
});

/**
* 定义「项目」,项目用于为 JOB 分组,第二个参数为「项目配置」
* {} 不能省略,省略时为获取指定名称的项目
**/
//定义「项目」
const demo = cize.project('demo', {});

/**
* 定义一个 JOB,这是一个最基本的 JOB,
* 其它各类,都是在此基础之上的「扩展」
**/
demo.job('hello1', function (self) {
//定义一个 Job,这是一个最基础的 Job
demo.job('hello', function (self) {
self.console.log('hello world');
self.done();
});
```

/**
* 定义一个用 SHELL 编写的 JOB
* 如下用到了 cize.shell,这是多个「内置扩展」中的一个
**/
demo.job('hello2', cize.shell(function () {
然后,在「工作目录」中执行 ```cize``` 启动服务

```
$ cize
Strarting...
The server on "localhost:9000" started
```
默认会启动和 CPU 核数相同的「工作进程」。

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

# 定义 Project
```js
const demo = cize.project('demo', {
...
//可以在此添加针对项目的配置
...
});
```
注意,即便一个项目不需要任何配置,也不能省略第二个参数,
没有第二个参数时 ```cize.project(name)``` 为获取指定的项目

# 定义 Job
假定现在已经有一个定义好的名为 ```demo``````project```

### 用 js 编写的 Job
```js
demo.job('test', function (self) {
self.console.log('test');
self.done();
});
```
这是最基础的 Job 类型,是其它 Job 类型或「扩展」的基础。

### 用 shell 编写的 Job
```js
demo.job('test', cize.shell(function () {
/*
echo "hello world"
*/
}));
```
定义一个用 SHELL 编写的 Job,用到了 cize.shell,这是一个「内置扩展」

然后,在「工作目录」中执行
```sh
$ cize
### 定时执行的 Job
```js
demo.job('test', cize.cron('* */2 * * * *', cize.shell(function () {
/*
echo "hello world"
*/
})));
```
如上定义了一个每两分种触发一次的 Job 并且,嵌套使用了 shell.

### 监听其它 Job 的 Job
```js
demo.job('test2', cize.by('test1', function(self){
self.console.log('hello');
self.done();
});
```
如下,在 test1 执行成功后,将会触发 test2
即可启动 CI 服务
### 串行执行的 Job
```js
demo.job('test', cize.series([
"test1",
function(self){
self.console.log('hello');
self.done();
},
"test3"
]));
```
$ cize
Strarting...
The server on "localhost:9000" started #30180
The server on "localhost:9000" started #30183
The server on "localhost:9000" started #30182
The server on "localhost:9000" started #30181
series 是一个内置扩展,可以定义一个「串行执行」多个步骤的任务列表,每个步骤可以是一个任意类型的 job,
也可以是指定要调用的其它 Job 的名称。
### 并行执行的 Job
```js
demo.job('test', cize.parallel([
"test1",
function(self){
self.console.log('hello');
self.done();
},
"test3"
]));
```
默认会启动和 CPU 核数相同的「工作进程」。
series 是一个内置扩展,可以定义一个「并行执行」多个步骤的任务列表,每个步骤可以是一个任意类型的 job,
也可以是指定要调用的其它 Job 的名称。
### 多步嵌套的 Job
CIZE 所有的 Job 可以自由嵌套,例如:
```js
demo.job('test', cize.parallel([
"test1",
function(self){
self.console.log('hello');
self.done();
},
"test3",
cize.series([
"test4",
cize.shell(function(){
/*
echo hello
*/
})
])
]));
```
当你使用一个「外部扩展」时,也可以混合使用。
接下来,可以在浏览器中访问 ```http://localhost/9000```
# 编写一个扩展
如上用到的 cize.shell、cize.series、cize。parallel、cize.cron、cize.by 是 cize 默契认包含的「内置扩展」。
编写一个「外部扩展」和「内置扩展」并无本质区别,如下:
```js
module.exports = function(options...){
return function(self){
//处理逻辑
};
};
```
如查需要在 Job 定义时进行一些处理,可以使用 ```register``` ,如下
```js
module.exports = function(options...){
return {
register: function(Job){
//Job 是你的「自定义 Job 类型」
//注册时逻辑
},
runable: function(self){
//执行时逻辑
}
};
};
```
可以将扩展发布为一个「npm 包」,让更多的人使用。
# 服务选项
可以通过一些选择去控制 CI 服务的端口、密钥等,有两种方式,如下
### 在 cizefile.js 中配置
```js
cize.config({
port: 9000,
secret: '12345'
});
```
### 通过命令行工具
```js
cize ./ -p=port -s=secret
```
通过 cize -h 可以查看完整的说明
```sh
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](https://github.com/Houfeng/cize/wiki)
请访问 wiki: [https://github.com/Houfeng/cize/wiki](https://github.com/Houfeng/cize/wiki)
# 路线图
- 所有 Job 都在单儿独立在一个进程中执行(现在可能会有 n 个 job 共用一个主进程)
- 集成 Docker
Loading