shell-deploy
Version:
快速创建和执行一个自动化任务
265 lines (184 loc) • 6.13 kB
Markdown
# shell-deploy
快速创建和执行一个自动化任务。
自动化任务是由一些列动作组成的,常见的动作有复制、删除、上传等等。通过执行自动化任务可以大幅度提高开发效率。
开发中经常会用到`shell`来做一些自动化任务,常见自动化任务有部署测试机、文件操作等等。不过`shell`具有众多版本、有些功能需要安装特定模块等问题,我们需要通过`node`代替`shell`。
`shell-deploy`通过可视化来选择每一步动作,再将每一步动作按照前后顺序组成一个自动化任务,最后将自动化转化成一个`deploy.json`配置文件并创建一个执行命令。
通过编辑`deploy.json`配置文件来完善每一步动作内容,通过`npm run`来运行自动化任务。
当一个项目有多人参与开发时,`shell-deploy`通过任务名称给每个人创建独立任务。每个人根据开发环境和习惯不同来创建自己的自动化任务,从而提高整个团队开发效率。
## 快速开始
使用`shell-deploy`模块分为三步
1. 安装模块
2. 创建任务
3. 执行任务
#### 1.安装模块
```js
npm install shell-deploy
```
或者
```js
yarn add shell-deploy
```
#### 2.创建任务
执行创建命令
```js
npx shell-deploy -c
```
或者
```js
npx shell-deploy --create
```
按照命令选择每一步内容
最终会生成一个`deploy.json`的配置文件, 同时会在`package`中创建相应的命令;
比如创建一个名字叫`preivew`上传文件到服务器的任务

#### 3.执行任务
通过`npm run`或者`yarn run`方法执行相应任务名称
比如执行`preview`任务
```js
npm run preview //上传文件到服务器
```
或者
```js
yarn run preview //上传文件到服务器
```

## 配置文件说明
第一次创建任务时会生成一个`deploy.json`配置文件,再次创建任务时会自动将任务添加到配置文件中, 所以`deploy.json`配置文件中会包含多个任务。
每个任务都有一个`Object`对象,它具有三个属性:
* name: 任务名称;
* infor: 任务描述;
* steps: 动作步骤;
比如这是一个`preview`任务,主要功能是部署到服务器。这个任务具有两个步骤:执行命令和上传服务器。
```js
{
"name": "preview",
"infor": "部署到服务器",
"steps": [{
"type": "command",
"command": "yarn run build"
},{
"type": "upload",
"host": "10.150.100.100",
"username": "root",
"password": "****",
"path": "/usr/server/nginx/staic/",
"source": "./build/"
}]
}
```
## 动作列表:
目前`shell-deploy`具有7个常见动作,通过这些工作不同顺序组合可以创建出很多任务。下面是每个动作API介绍。
- upload
- command
- copy
- cd
- delete
- git-pull
- git-commit
通用字段:
- title: 说明当前步骤是什么
#### upload
将文件上传到服务器上
- host: 服务器地址(可以是 IP 地址)
- username: 用户名
- password: 密码
- path: 指定服务器上传路径
- source: 本地上传文件路径
比如将`build`文件夹整体上传到服务器`/usr/server/nginx/staic/`路径下(提醒:会生成build文件夹)
```js
{
"type": "upload",
"host": "10.150.100.100",
"username": "root",
"password": "****",
"path": "/usr/server/nginx/staic/",
"source": "./build/"
}
```
比如将`build`文件夹下所有文件上传到服务器`/usr/server/nginx/staic/test`路径下(提醒:不会生成build文件夹, 如果服务器上没有`test`文件夹会自动生成)
```js
{
//.....
"path": "/usr/server/nginx/staic/test",
"source": "./build/*"
}
```
#### command
需要执行的命令
- command: 命令名称
比如执行`npm run build`命令
```js
{
"type": "command",
"command": "npm run build"
}
```
#### copy
复制文件和文件夹
- source: 需要复制文件和文件夹路径
- dest: 目标路径
比如拷贝`a.js`文件到`./dest/`路径下 (提示:如果没有dest文件夹会自动创建一个)
```js
{
"type": "copy",
"source": "./test/a.js",
"dest": "./dest/"
}
```
比如拷贝`test`整个文件夹到`./dest/`路径下 (提示:如果没有dest文件夹会自动创建一个)
```js
{
"type": "copy",
"source": "./test",
"dest": "./dest/"
}
```
#### cd
进入指定文件夹路径
- path: 指定文件夹路径
比如cd到`./test/`文件夹下
```js
{
"type": "cd",
"path": "./test/"
}
```
#### delete
删除指定文件或者文件夹
比如删除`a.js`文件
```js
{
"type": "delete",
"path": "./test/a.js"
}
```
#### git-pull
通过`git pull`拉取代码
比如拉取代码
```js
{
"type": "git-pull"
}
```
#### git-commit
通过`git commit`提交代码
- message: 提交的文案; 如果这个字段不存在,会自动提示填写提交信息;
比如提交代码
```js
{
"type": "git-commit"
"message": "修改xxx文件"
}
```
## 文件监听和定时执行任务
有些时候需要自动执行任务,比如文件发生变化或者定时执行。通过使用`chokidar`和`croncli`两个模块来完成。
通过[chokidar-cli](https://www.npmjs.com/package/chokidar-cli)模块指定监听的文件,当文件变化时执行任务。比如:
比如监听js文件变化,当js文件变化时执行任务
```js
chokidar "src/*.js" -c "npm run preview"
```
通过[croncli](https://www.npmjs.com/package/croncli)模块创建定时任务,当时间到了以后执行任务
比如每分钟执行自动化任务
```js
croncli -s "0 * * * * *" -c "npm run preview"
```