为什么选择bash写部署脚本
平时在自己搭服务器或者维护小项目时,总免不了要上传代码、重启服务、更新依赖。手动操作一两次还行,次数多了就容易出错,比如忘了重启进程,或者漏了数据库迁移。这时候写个bash部署脚本,点一下就能全自动上线,省心又靠谱。
一个简单的部署脚本长什么样
假设你有个Node.js项目放在GitHub上,每次更新后想自动拉取代码、安装依赖、重启服务。下面这个脚本就能搞定:
#!/bin/bash
# 项目目录
APP_DIR=/var/www/myapp
# 进入项目目录
cd $APP_DIR || exit 1
# 拉取最新代码
git pull origin main
# 安装依赖
npm install
# 重启服务(使用pm2)
pm2 restart myapp
# 输出完成提示
echo "部署完成:$(date)"
怎么让它跑起来
先把脚本保存成 deploy.sh,然后给它执行权限:
chmod +x deploy.sh
之后只要运行 ./deploy.sh,整个部署流程就自动走完了。你可以把它放在服务器上,每次改完代码手动执行,也可以结合GitHub Webhook实现自动触发。
加点判断让脚本更稳
如果网络不好,git pull 失败了,你还让它继续装依赖,那后面全白搭。加个简单的判断就能避免这个问题:
if git pull origin main; then
echo "代码更新成功"
else
echo "代码拉取失败"
exit 1
fi
这样一旦某一步出问题,脚本就会停下来,不会继续往下执行。
传参数让脚本更灵活
有时候你想指定分支部署,比如测试环境上跑 develop 分支。可以改写脚本接收参数:
BRANCH=$1
if [ -z "$BRANCH" ]; then
BRANCH="main"
fi
git pull origin $BRANCH
调用的时候就可以写成 ./deploy.sh develop,方便多了。
实际用起来的小建议
脚本写好后别忘了备份,别放在项目根目录里跟着代码一起提交。另外,敏感信息比如密码、密钥别直接写在脚本里,可以用环境变量读取。还有,每次执行后最好记下日志,方便以后查问题。
比如把输出重定向到日志文件:
./deploy.sh >> /var/log/deploy.log 2>&1
这样每次部署的时间和结果都清清楚楚。