nodejs自动打包构建工具替代Jekins(1) - linux命令基础

之前在水牛下水系列(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 < targetFile <<Signature Signature - 将两个Signature之间的内容写入到目标文件

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] 压缩 - 压缩的时候是c

1
2
cd output
tar -zcvf ../output.tar.gz *; - 将output目录中的所有文件压缩成上一级目录中的output.tar.gz文件

[2] 解压 - 解压的时候是x

1
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 的命令会自动创建不存在的目录

复制和移动命令的总结

注意移动和复制的区别 - 移动后源文件不在了,复制只是对源文件复制一份

  1. 复制多个文件<指定目录>
  • cp -r www/* dist/www/
  1. 复制单个文件<指定目录>
  • cp nginx.conf dist/www/
  1. 复制单个文件到指定<目录下的文件>
  • cat nginx.conf > ../nginx.conf.bak
  1. 移动单个文件/多个文件指定目录
  • mv nginx.conf ./bak/
  • mv ./src/* ./bak/src - 注意这种src里面的内容被移动到./bak.src目录下,但是src目录还在
  • mv ./src ./bak/src - src被整个移动到./bak/src目录下

参考连接

让你牛B加身的前端必会Linux命令

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场