因为是公司的服务器,所以就不方便就我遇到的情况进行演示,那么可以假定有这么一个场景:
你的本地电脑上有两个前端项目,假定名称为 project1、project2,在打包成生产版本后压缩成zip格式的文件,假定名称都是 dist.zip
需要上传到两台服务器,对应的名称和ip地址分别为:host1 / 192.163.22.3;host2 / 192.167.23.6,登录这两台服务器的密码是 m123456,当然你也可以不设置密码
本地代码 project1 需要上传到两台服务器的位置为:/data/resource/fontend/project1;project2 需要上传到服务器的位置为:/data/resource/fontend/project2
- 选择一个上传工具,就是本地主机和服务器主机的软件,这个随意选择。我都是使用公司自研的,所以其他工具不太了解,不过要选择可以使用命令行命令的工具,这样才能更好的实现脚本自动化
首先编写登录服务器的脚本,命名为 login.sh。目前我使用的都是 ssh 登录方式,具体形式为:ssh username@ip -p port。正如之前所说,有两台服务器,那么可以做一个选择项显得更加人性化,而且能有更好的提示:
#! /bin/bash# login.sh# ssh loginecho "please choose host ip: "select ip in 192.163.22.3 192.167.23.6 do case $ip in "192.163.22.3") ssh root@192.163.22.3 -p 22 echo "login success" break;; "192.167.23.6") ssh root@192.167.23.6 -p 23 echo "login success" break;; *) echo "Invaild input" break;; esac done
当使用 source login.sh 运行后命令行就会提示你进行选择,这时你可以输入 1 或者 2 来选择你将要进行登录的服务器ip:
假如你设置了密码,下一步会提示你输入密码,之后就进入了服务器了!
目前使用了一次命令 Part 2进入到服务器之后,建议使用 sudo su 命令切换为 root 用户,这样免去了无权限的情况,当然还是看具体情况了。现在要做的就是写一个上传代码的脚本,命名为 upload.sh。这里另提一下,不要将 sudo su 命名写到脚本里,因为它会中断脚本的执行,具体原因也不清楚,感兴趣可以自行 google / 百度。具体的要求是上传两个代码压缩包到服务器指定目录:
#!/bin/bash# upload.sh# mvdir function used by implements change directory namefunction mvdir() { # judge whether project1 / project2 exist ? # 判断 project1 / project2 是否存在 if [ -d "$1" ]; then # yes mv $1 $1_bak_$(date +%F_%T) mv temp$1 $1 echo "update $1 success" else # no mv temp$1 $1 echo "new add $1 success" fi}# upload function used by implements upload logic# 上传时的逻辑为:# 1. 新建一个临时的文件夹,带有 temp 前缀,即 tempproject1 / tempproject2。因为可能 /data/resource/fontend 下# 有之前的 project1 / project2,一般来说不会将之前的覆盖,而是改个名字保存下来,用于恢复# 2. 进入 tempproject1 / tempproject2 中,执行上传代码命令上传dist.zip,之后解压zip# 3. 回到上级目录,将之前的 project1 / project2 改名为 project1(2)_bak_${current_time}; # 将 tempproject1 / tempproject2 改名为 project1 / project2function upload() { mkdir temp$1 && cd temp$1 echo "mkdir $1 success" # 上传dist.zip的具体代码,因为每个工具的命令估计不一样,视不同工具而定 # 模拟上传命令,不可使用 up -g $1/dist.zip echo "upload dist.zip success" # 解压 unzip dist.zip # 回到上级目录 cd .. echo "back to $(pwd) success" # 改名目录名 mvdir $1}# enter /data/resource/fontend 进入 project1 和 project2 的上级目录cd /data/resource/fontendecho " $(pwd) "echo "please choose upload resource, project1 or project2: "select res in project1 project2 do case $res in "project1") upload project1 break;; "project2") upload project2 break;; *) echo "Invalid input" break;; esac done
执行 source upload.sh 之后,就是进行文件的自动上传,包括文件的重命名。下图中没有上传的操作信息,因为 project1 之前存在,所以是 update project success:
因为 project2 没有存在,所以是 new add project2 success:
[1]: https://wangdoc.com/bash/script.html