this is a multiprocess building tasks scheduler
npm install @fin/ci-task-runner




[[English]](./README.md) - [[简体中文]](./README.ZH-CN.md)
This is a multiprocess building tasks scheduler, which is written based on NodeJS. It supports the increment and parallel building and can improve the speed of server building largely.
As a common task scheduler, Ci-task-runner enhances the running speed of the tools such as Jenkins, Gitlab-CI or Webpack, Gulp rather than take place of them.
> "After moving a large frond-end program to this continuous integration system for building, we took around 10 minutes to modify every minor file. We had to develop this ci-task-runner which reduces the time to 1 minutes."
1\. Incremental Building:
Medium and large project needs full dose building if a little file has changed, in this way the building speed will be very slow. For sloving this problem, ci-task-runner diff commit logs of Git or Svn and building changed file.
2\. Parallel Building:
If multiple tasks be executed, ci-task-runner will initiate a new process according to current server's CPU quantities, using mutiprocess parallel building to finish tasks quickly.
``shell`
npm install ci-task-runner -g
file, example:`json
{
"tasks": ["mod1", "mod2", "mod3"],
"repository": "git",
"program": "cd ${taskPath} && webpack --color"
}
`
And then run the command in the project directory to perform the above defined
tasks`shell
ci-task-runner
`Above-mentioned: mod1、mod2、mod3 will run
cd ${taskPath} && webpack --color ordered by catelogue changed.According basic usage, the most difference between the task concept of ci-task-runner and other task executors is that each task is based on a file or folder in the code repository.
> Using CI tools run ci-task-runner On the server, reference: Continuous integration.
Configuration
$3
Task target list, the target can be any directory or file in the repository.
Simplified:
{string[]}`json
{
"tasks": ["mod1", "mod2", "mod3"]
}
`Advanced:
{Object[]}`json
{
"tasks": [
{
"name": "mod1",
"path": "path/mod1",
"dependencies": ["common/v1"],
"program": "cd ${taskPath} && gulp"
},
"mod2",
"mod3"
]
}
`dependencies and program will inherit the top of the configuration, or cover it.
2. tasks support configure parallel tasks, reference: Mutiprocess Parallel Tasks.$3
ci-task-runner cache files write path, used to save the last task info. Default: node_modules/.cache/ci-task-runner/${Package.version}.json$3
Task target external dependency list. If the task target relies on a library outside the directory, you can specify the dependency manually, so that changes to the external library can also trigger the task to run.
> ci-task-runner use Git or Svn to realize changed detection, so the path must already be versioned
$3
Setting the type of repository. Support Git and Svn.
$3
Set the maximum number of parallel progress. Default:
require('os').cpus().length.$3
Running task's configuration.
Simplified:
{string}`json
{
"program": "cd ${taskPath} && node build.js"
}
`Advanced:
{Object}`json
{
"program": {
"command": "node build.js",
"options": {
"cwd": "${taskPath}",
"timeout": 360000
}
}
}
`####
program.commandSetting start command.
> program will put
${options.cwd}/node_modules/.bin and ${process.cwd()}/node_modules/.bin in environment variable PATH, like npm scripts install on local.####
program.optionsProgress configuration.
*
cwd Current working directory of the child process
* env Environment key-value pairs
* timeout Timeout
* uid Sets the user identity of the process
* gid Sets the group identity of the process#### Variable
program supporting string variable.*
${taskName} task name
* ${taskPath} task target absolute path
* ${taskDirname} equal to path.diranme(taskPath),detailConfiguration Example
$3
If tasks have no dependencies in each other, it can open mutiprocess run task, then take full advantage of multi-core CPU accelerating running.
Tasks outside task name is serial run, if array will parallel running:
`json
{
"tasks": ["dll", ["mod1", "mod2", "mod3"]],
"repository": "git",
"program": "cd ${taskPath} && webpack --color"
}
`Above-mentioned: when dll has build, mod1、mod2、mod3 will parallel building by mutiprocess.
$3
`json
{
"tasks": ["dll", ["mod1", "mod2", "mod3"]],
"dependencies": ["dll", "package.json"],
"repository": "git",
"program": "cd ${taskPath} && webpack --color"
}
`Above-mentioned: when dll and package.json has changed, whatever other task's target has changed or not it will be forced to building.
$3
`json
{
"tasks": [
{
"name": "package.json",
"program": "npm install"
},
"dll",
["mod1", "mod2", "mod3"]
],
"dependencies": ["package.json", "dll"],
"repository": "git",
"program": "cd ${taskPath} && webpack --color"
}
`Above-mentioned: when package.json has changed, it will run
npm install` to install dependencies to keep project up-to-date.Using CI tool to run ci-task-runner on server-site.
About:
* gitlab: gitlab-ci
* github: travis
* Jenkins
CI configuration can refer to relative API.
> Webpack throw error but didn't exit: Webpack configuration.bail