跳到主要内容

前端代码自动化部署脚本

前提

在每次部署自己的项目的时候,都需要手动打包之后,然后打开xtp,把包拖进去进行部署,很麻烦

在实习的时候遇到了在公司部署代码的情况,参看我司的前端部署脚本,修改了给自己的代码使用

部署的过程

创建scp.sh文件

第一阶段

# 发布
# 将build文件 推送到 ubuntu是账户名 @后面是你的ip地址+路径,执行后会让你输入密码
scp -r build ubuntu@ip:/home/ubuntu/blog/build

但是在我一次次的推送,发现页面并没有什么变化,原因是这个命令并不会覆盖之前的代码

这样同时也会造成服务器的代码越来越多

第二阶段

于是我查阅资料,有一个命令是使用--force,但是我在执行的时候可能是windows不支持还是什么原因,就是这个命令不行,在这里先纪录一下:scp -r --force build ubuntu@ip:/home/ubuntu/blog/build

既然不能做到上传覆盖,那就在上传之前先删除服务器中的代码,在进行删除

# 删除
echo "正在发布到 ... 环境..."
ssh ubuntu@ip "rm -rf /home/ubuntu/blog/build"

# 发布
scp -r build ubuntu@ip:/home/ubuntu/blog/build

但这样设置的话,需要输入两次密码,如果想要只输入一次密码,可能需要安装什么东西,在windows上的支持性也不强,目前没有继续输入研究

第三阶段

上述脚本,我们可以将打包的命令融入进来,这样就不需要我们在进行手动的打包一下了,顺便加一些提示

# 打包
echo "正在打包应用..."
npm run build # 打包命令

# 删除
echo "正在发布到 ... 环境..."
ssh ubuntu@ip "rm -rf /home/ubuntu/blog/build"

# 发布
scp -r build ubuntu@ip:/home/ubuntu/blog/build

# 检查 scp 命令的退出状态
if [ $? -eq 0 ]; then
echo "推送成功"
else
echo "推送失败,请检查错误信息"
fi

完整命令

#!/usr/bin/env bash

# 1. 打包应用
echo "正在打包应用..."
npm run build # 打包命令

# 2. 先删除服务器上的文件
echo "正在发布到 ... 环境..."
ssh ubuntu@ip "rm -rf /home/ubuntu/blog/build"

# 3. 发布,如果在之前不删除的话,并不会覆盖之前的文件
# 将build文件 推送到 ubuntu是账户名 @后面是指定路径,执行后会让你输入密码
scp -r build ubuntu@ip:/home/ubuntu/blog/build

# 4. 检查 scp 命令的退出状态
if [ $? -eq 0 ]; then
echo "推送成功"
else
echo "推送失败,请检查错误信息"
fi

部署多个环境的情况

echo "选择要部署的环境"
select name in "11.11" "11.12"
do
case $name in
"11.11")
mv build web # 将"build"目录改名为"web"
scp -r web ubuntu@ip:/home/ubuntu/blog
mv web build # 将"web"目录改名为"build"
break
;;
"11.12")
scp -r build ubuntu@ip:/home/ubuntu/blog
break
;;
*)
echo "输入错误,请重新输入"
esac
done