之前在水牛下水系列(0)- linuxDeploy 基础及其服务器nginx静态资源部署写过在项目上部署一个前端工程的基本流程
[🦶] npm run build通过打包工具将前端工程打包成静态资源到置顶的目录
[🦶] 手动对静态资源目录dist和nginx等项目部署的配置文件进行压缩
[🦶] 通过ssh工具上传静态资源到服务器的指定目录下
[🦶] 备份上一个版本的静态资源目录
[🦶] 将新的静态资源目录放到nginx服务目录下,并修改nginx配置文件
[🦶] 重启nginx服务
这么一个手动部署应用的过程,在项目中已经使用jekins在代码仓库gitlab中配置了git hook,当master分钟有代码的push,就会触发Jekins执行上面一系列的操作将项目代码部署到服务器上…前阵子无意间刚好看到一个哥们用nodejs实现了这一些列的功能,改吧改吧准备在项目上试试,也顺便看看如何通过nodejs实现这一些列的操作。
linux基础
因为上述devOps的流程中牵扯了一系列命令行操作
- 执行
npm run build打包的npm脚本 - 使用tar命令压缩dist目录
- node-ssh连接ssh服务器上传dist已经nginx配置文件
- 复制文件到指定目录/备份文件
- 重启nginx
所以打算先看看一些linux下常用的命令,后面有的会用到,其他的也就复习一下…
cat命令
[格式] cat <文件名>[>或者>>]<文件名>
[1] cat existFilename - 查看已经存在的文件内容
[2] cat existFile1 existFile2 > targetFile - 把已经存在的文件复制到目标文件中
[3] cat existFile >> targetFile - 把已经存在的文件追加到目标文件中
[4] cat >> targetFile <
echo命令
[格式] echo <内容> [>或者>>] <文件名>
[1] echo outputContent - 在控制台中输出
[2] echo content > targetFile - 把内容写入到目标文件中
touch命令
[1] touch fileName - 创建不包括内容的文件
mv命令
[格式] mv <源文件/目录> <新文件名/目录>
[1] mv existFilename targetFolder - 把文件移动到目标目录下
[2] mv existFile newFileName - 修改文件名字
cp命令 - 将源文件复制到目标文件,或者将多个源文件复制到目标文件
[格式] cp [选项] <源文件> <目录>
[1] cp existFilename targetFolder - 复制文件到指定目录
[2] 配置参数
- -n/–no-clobber: 不要覆盖已存在文件,与下面的-i互斥使用。(经测试,cp的默认行为是覆盖,至少 mac 是这样的 😳)。
- -i/–interactive: 覆盖前询问
- -r: 递归复制,用于复制目录
- -f/–force: 强行复制文件或内容,不论目的文件或目录是否已存在
- -u/–update:只有在源文件比目标文件新时才复制
一般我们会有两种操作:
- 一种是复制目录下的所有内容,
cp -r www/* output/www/ - 一种是复制单个文件。
cp nginx.conf output/
tar命令 - 可以用来压缩和解压文件
[格式] tar [选项] <打包文件名> <文件>
其中压缩和解压只有一个参数之差,下面我们来看一下这几个参数吧。1
2
3
4
5-z: 支持 gzip 解压文件
-c: 建立新的压缩文件 //
-v: 显示操作过程
-f: 指定压缩文件
-x: 从压缩的文件中提取文件
[1] 压缩 - 压缩的时候是c1
2cd output
tar -zcvf ../output.tar.gz *; - 将output目录中的所有文件压缩成上一级目录中的output.tar.gz文件
[2] 解压 - 解压的时候是x1
tar -zxvf ../output.tar.gz;
rm命令
[1] 删除文件 - rm filename
[2] 删除文件夹 - rm -rf folder
mkdir命令 - 可以用来创建目录,要求命令执行用户有当前目录的写权限,且创建的目录不能已存在。如果创建的目录已存在会给予提示,但不会报错
[格式] mkdir [选项] <目录名>
[1] 创建文件夹 mkdir src
[2] 创建多层文件夹 mkdir -p src/views/component - 看出带有参数 p 的命令会自动创建不存在的目录
复制和移动命令的总结
注意移动和复制的区别 - 移动后源文件不在了,复制只是对源文件复制一份
- 复制
多个文件到<指定目录>
- cp -r www/* dist/www/
- 复制
单个文件到<指定目录>
- cp nginx.conf dist/www/
- 复制
单个文件到指定<目录下的文件>
- cat nginx.conf > ../nginx.conf.bak
- 移动
单个文件/多个文件到指定目录
- mv nginx.conf ./bak/
- mv ./src/* ./bak/src - 注意这种src里面的内容被移动到./bak.src目录下,但是src目录还在
- mv ./src ./bak/src - src被整个移动到./bak/src目录下