rdtool
Version:
A simple Node.js-based remote deployment tool that makes deployments easier with config files.
150 lines (133 loc) • 8.73 kB
Markdown
 [](https://gitee.com/roman_123/auto-remote-deployment-tool) [](https://github.com/qq306863030/auto-remote-deployment-tool) [](https://www.npmjs.com/package/auto-remote-deployment-tool) 
> A simple Node.js-based remote deployment tool that makes deployments easier with config files.
> 一个基于nodejs的简单的远程部署工具,可以通过配置文件让部署工作变得更容易。
[简体中文](https://github.com/qq306863030/auto-remote-deployment-tool/blob/master/readme.md) | [English](https://github.com/qq306863030/auto-remote-deployment-tool/blob/master/readme.en.md)
```bash
npm install -g rdtool
```
```bash
rdt init [configFileName]
rdt exec [configFilePath]
```
```bash
{
"description": "一个配置文件示例", // 配置文件描述,程序启动时显示
"scriptCode": "", // 脚本执行命令(相对路径指向rdt命令执行的目录)
"host": "127.0.0.1", // 远程服务器IP地址
"port": 22, // 远程服务器SSH端口
"username": "root", // 远程服务器用户名
"password": "password", // 远程服务器密码
"privateKeyPath"?: "C:/id_rsa", // 远程服务器私钥文件路径(与密码选其一)
"localBaseDir": "./", // 本地执行命令的根目录
"remoteBaseDir": "/home", // 远端执行命令的根目录
"isPrintResult": true, // 是否打印执行结果
"isPrintCurCommand": true, // 是否打印当前执行的命令
"isPrintCurTime": true, // 是否在执行中打印当前时间
"isPrintTotalExecTime": true, // 是否打印总的执行时间
"commands": [] // 命令数组
}
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]自定义标识符
[]
[]
isNotPrint
isSkipErr
isBoolInversion
isPrintUploadPath
{localBaseDir}
{remoteBaseDir}
{time-[format]}(替换为当前时间,示例: {time-[YYYY-MM-DD HH:mm:ss]})
{startTime-[format]}(替换为开始执行脚本的时间,示例: {startTime-[YYYY-MM-DD HH:mm:ss]})
```
```js
module.exports = {
"description": "一个配置文件示例",
"scriptCode": "rdt exec ./server.config.js", // 脚本执行命令(相对路径指向rdt命令执行的目录, 该字段仅作为记录标识)
"host": "127.0.0.1",
"port": 22,
"username": "root",
"password": "password",
"localBaseDir": "./",
"remoteBaseDir": "/home",
"isPrintResult": true, // 是否打印执行结果
"isPrintCurCommand": true, // 是否打印当前执行的命令
"isPrintTotalExecTime": true, // 是否打印总的执行时间
"isPrintCurTime": true, // 是否在执行中打印当前时间
"commands": [
"[local:]npm run build", // 本地执行命令, 打包文件
"[remote:]cd /usr;ls -al", // 查看当前目录详情
"[upload:]./dist,./dist", // 上传项目目录
"[upload:]./test.txt,./test.txt", // 上传文件并增加时间戳
"[upload(isPrintUploadPath):]./test.txt,./test{startTime-[YYYY-MM-DD_HH-mm-ss]}.txt", // 上传文件并增加时间戳, 打印上传路径
"[remote-mkdir:]./test-dir", // 创建一个目录
"[remote-cp:]./test.txt,./test-dir/test.txt", // 远程拷贝文件
"[remote-mv:]./test.txt,./test{startTime-[YYYY-MM-DD]}.txt", // 重命名文件
"[remote-rm:]./test.txt", // 删除文件
"[remote-rm:]{remoteBaseDir}/dist", // 删除目录
"[print:]脚本执行完成"
]
}
module.exports = {
"description": "一个配置文件示例",
"scriptCode": "rdt exec ./server.config.js", // 脚本执行命令(相对路径指向rdt命令执行的目录)
"host": "127.0.0.1",
"port": 22,
"username": "root",
"password": "password",
"localBaseDir": "./",
"remoteBaseDir": "/home",
"isPrintResult": true, // 是否打印执行结果
"isPrintCurCommand": true, // 是否打印当前执行的命令
"isPrintTotalExecTime": true, // 是否打印总的执行时间
"isPrintCurTime": true, // 是否在执行中打印当前时间
"commands": [
"[local:]echo 'hello world'", // 打印hello world,并输出返回内容hello world
"[local(isNotPrint):]echo 'hello world'", // 仅打印hello world,不输出返回内容
"[remote-hasPath:]/usr", // 判断usr目录是否存在,返回true
"[remote-hasPath:]/my-remote-test", // 判断my-remote-test目录是否存在,返回false
"[remote(isSkipErr):]cd /my-dir/my-remote-test", // 创建目录/dir/my-remote-test,由于路径不存在创建失败,isSkipErr跳过错误
"[remote(isSkipErr, isNotPrint):]cd /my-dir/my-remote-test", // 创建目录/dir/my-remote-test,由于路径不存在创建失败,isSkipErr跳过错误, isNotPrint不打印报错信息
"[remote-mkdir:]/my-remote-test", // 创建目录/my-remote-test
"[remote-hasPath:]/my-remote-test", // 判断my-remote-test目录是否存在,返回true,执行以下数组的内容
[
"[remote:]cd /my-remote-test;mkdir /my-remote-test/test1", // 在目录my-remote-test中创建目录test1
"[remote-mv:]/my-remote-test/test1,/my-remote-test/test{time-[YYYY-MM-DD]}" // 重命名test1
],
"[remote-hasPort:]8003", // 判断端口是否被占用, 如果返回false,则不执行以下数组的内容
[
"[remote-mkdir:]/my-remote-test/test2", // 创建目录test2
"[print:]'数组执行'"
],
"[remote-hasPort(isBoolInversion, isNotPrint):]8003", // 判断端口是否被占用, 如果被占用,则返回true,通过设置isBoolInversion取反,最后返回false,数组不执行
[
"[print:]'数组2执行'"
],
"[print:]脚本执行完成"
]
}
```