利用shell编程,部署项目到服务器

现在在前后端分离的开发形式中,每次前端将VUE项目打包之后,需要后端程序员部署到服务器上。这过程为何没有用git,因为每次vue打包后的文件都不相同与前一次打包,git为何的话,会包含过大迭代版本,同时git提交过多小文件速度也不快。

传统的方式

windows系统下xshell可以直接用文件管理工具(类似ftp),将压缩包上传服务器(如 /data/www/project1),同时将旧的所有备份到/data/www/project1/bak/

利用shell编程,一键运行部署

思路:
1.使用scp命令,将本地文件上传到服务器(scp /path/filename username@servername:/path ),例如:

scp /Users/chq/Downloads/dist.rar  [email protected]:/data/www/ads.vue.tanwan.com/

2.例如ssh命令切换到服务器
3.删除bak文件里面的上一次备份文件;
4.将当期除了dist.rar 和 bak的文件,全部拷贝到bak文件夹内;

  1. 解压dist.rar文件到当期文件夹内;

其中第3,4,5步骤可以合并为shell文件操作:
shell编程发布文件release.sh如下:

#!/bin/sh
# 服务器发布ads项目前端代码脚本
folder=/data/www/ads.vue.tanwan.com
f_bak=$folder/dist_bak
rar=$folder/dist.rar

[ -r "$folder" ] || { echo "没找到目录:$folder" ; exit 1; }
[ -w "$folder" ] || { echo "修改目录可写入: $folder" ; chmod 755 $folder; }
[ -r "$rar" ] || { echo "没有找到rar文件: $rar"; exit 1; }
[ -r "$f_bak" ] || { echo "创建备份目录:$f_bak"; mkdir $f_bak; chmod 755 $f_bak; }
echo "清除上一次备份文件:"
rm -rf $f_bak/*

for i in $folder/*
do
   #echo "Hello , $i"
   if [ "$i" != "$f_bak" ] && [ "$i" != "$rar" ];then
      echo "备份当前文件:cp -rf $i $f_bak"
      cp -rf $i $f_bak
      rm -rf $i
   fi
done

# 解压rar文件
unrar x -rf $rar $folder
echo "发布文件:$rar 到 $folder 成功!"

这是,正常一个流程就是scp上传文件到远程服务器,再ssh登录远程服务器,最后执行release.sh,操作还有优化空间:即合并所有步骤:

#!/bin/sh
# 本地推送最新ads前端文件到远程服务器
[email protected]
webPath=/data/www/ads.tanwan.com
# 默认本地压缩包路径,可以通过shell命令传参来修改,如:sh publish.sh D:/test/dist.rar
rar=/Users/chq/Documents/dist.rar
if [ $1 ]; then
    rar=$1
fi
[ -r "$rar" ] || { echo "没有找到rar文件:$rar "; exit 1; }

scp $rar  $service:$folder
set timeout 10
#本地执行远程服务器shell脚本
ssh -T $service "$webPath/tool/shell/release.sh"

猜你喜欢

转载自www.cnblogs.com/chq3272991/p/10419437.html