需求描述
由于研发项目较小,团队人员较少,所以没有部署jenkins。需要写一个自动化部署的shell脚本,实现在本地执行脚本自动完成打包,上传、备份、重启等操作。
具体实现
1、在项目根目录新建名为deploy.sh的脚本文件,每次修改完代码,直接在根目录打开git命令窗口,执行sh deploy.sh
2、下面是实现代码
#!/bin/bash
set -e
#存储原始环境变量
OriginHOME=$HOME
export HOME=/home/remoteusername
if [[ $1 != "dev" && $1 != "test" && $1 != "pre" ]]
then
echo -e "\033[41;37m 不存在 $1 环境 只有 -> dev(联调) test(测试) pre(预生产) \033[0m"
exit
fi
#记录当前时间2022-10-0911:08:55
time=$(date "+%Y-%m-%d%H:%M:%S")
#备份文件名称 dist2022-10-0911:08:55
newFileName="dist"$time
#服务器上的路径
filePath=""
function deploy() {
#上次包备份
#连接服务器,对上次的包进行备份
ssh -p 22 root@ip mv /xx/xx/xx/${filePath}/dist /xx/xx/xx/${filePath}/${newFileName}
echo -e "\033[32m 连接成功,上传代码中... \033[0m"
#复制dist文件上传到远程服务器
scp -r dist root@ip:/xx/xx/xx/${filePath}
echo -e "\033[32m 代码上传成功 \033[0m\n"
#重启nginx
ssh -p 22 root@ip '/xx/xx/xx/nginx -s reload'
echo -e "\033[32m nginx重启成功 \033[0m\n"
}
function build() {
#执行打包命令
yarn build:prod
#-e\033[32m设置文字前景色绿色
echo -e "\033[32m 打包完毕 \033[0m"
echo -e "\033[32m 连接 $1 服务器 \033[0m"
if [ $1 == "dev" ];then
filePath="联调环境的包存放文件名"
elif [ $1 == "test" ];then
filePath="测试环境的包存放文件名"
elif [ $1 == "pre" ];then
filePath="预生产环境的包存放文件名"
else
echo -e "您输错环境名称了吧..."
exit
fi
deploy
}
build $1
3、由于本地客户端无法安装sshpass或except来实现免密登录,你可以在客户端生成ssh公钥并把它放在服务器上,来完成免密登录。