每次上线新版本都要手动复制文件、重启服务、检查日志?重复操作不仅耗时,还容易出错。其实,一个简单的 bash 脚本就能把这些步骤全包了。
为什么选 bash 写部署脚本
Linux 系统自带 bash,几乎不用额外安装环境。写个脚本,几行命令就能完成打包、上传、服务重启全套动作。比如你在公司负责部署测试环境,每天要更新三四次代码,手动操作到后面根本不想动。写个脚本后,敲一个命令就搞定,喝口水的功夫已经跑完了。
一个实际的例子
假设你要把本地的代码推到远程服务器,然后解压并重启 Node 服务。可以写这样一个脚本:
#!/bin/bash
# 配置变量
LOCAL_PATH="./dist"
REMOTE_USER="deploy"
REMOTE_HOST="192.168.1.100"
REMOTE_PATH="/var/www/html"
SERVICE_NAME="webapp"
# 打包本地文件
echo "正在打包文件..."
tar -czf deploy.tar.gz $LOCAL_PATH
# 上传到服务器
echo "正在上传..."
scp deploy.tar.gz $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH
# 清理本地包
rm deploy.tar.gz
# 远程执行解压和重启
ssh $REMOTE_USER@$REMOTE_HOST << 'EOF'
cd /var/www/html
rm -rf ./dist
tar -xzf deploy.tar.gz
systemctl restart $SERVICE_NAME
rm deploy.tar.gz
echo "部署完成!"
EOF
保存为 deploy.sh,加个执行权限:chmod +x deploy.sh,以后只需要运行 ./deploy.sh 就行。
加点判断更安全
脚本跑着跑着发现代码还没构建成功?可以在开头加个判断:
if [ ! -d "./dist" ]; then
echo "错误:找不到 dist 目录,请先构建项目"
exit 1
fi
这样脚本就不会在缺少文件的情况下继续执行,避免传了个空包上去。
多人协作时的小技巧
团队里有人用 Windows,有人用 Mac,直接共享脚本可能出问题。可以把脚本放在项目根目录,加上说明文档,大家统一用 WSL 或终端运行。还可以在 CI/CD 流程里调用这个脚本,提交代码后自动触发部署。
别小看这几行命令,它能把原本十分钟的操作压缩到半分钟。省下来的时间,够你泡杯咖啡,或者多盯两眼监控有没有异常。