小王刚接手公司一个老项目,每次上线都要手动打包、改配置、传服务器、重启服务,光是走完流程就得两小时。有次凌晨三点改完 bug,手抖输错一个路径,直接把生产库连错了——这事儿后来成了组里茶水间常备段子。
好处真不是吹的
部署自动化最实在的一点:省时间。用 Jenkins 或 GitHub Actions 跑一套流水线,从代码提交到服务上线,5 分钟搞定。中间还能自动跑单元测试、检查代码规范,比人眼盯屏幕靠谱多了。
比如你改了前端页面,CI 流程里加一行:
npm install && npm run build && rsync -av dist/ user@server:/var/www/myapp/下次提交带 feat: 新增搜索框 的 commit,服务器就自己动起来了。另一个隐形好处是“可复现”。开发环境能跑,测试环境能跑,生产环境也照着同一套脚本走,基本告别“在我电脑上是好的”这种玄学。
坑也明明白白摆在这儿
自动化不是万能膏药。脚本写得糙,可能一键清空整个日志目录,也可能误删备份文件。有团队图省事,把数据库迁移语句硬编码进部署脚本,结果某次回滚时顺手把线上表结构给重置了。
还有个现实问题:学习成本。运维同事会写 Shell,但让他配好一个完整的 GitLab CI YAML 文件,可能得查半天文档、试错七八次。脚本一旦出问题,排查起来比手动操作还费劲——毕竟你看不见它中间哪一步卡住了,只能扒日志、翻流水线输出。
更麻烦的是“假自动化”:有些团队所谓自动化,其实是把原来手动点的 10 步,录成一个 AutoHotkey 脚本,照样要人守着点运行。这不算真自动化,顶多算“鼠标批发商”。
适合谁?不适合谁?
小团队做内部工具、迭代快的创业项目,哪怕只用一个 deploy.sh 文件,也能明显减少发布焦虑。但要是系统牵扯银行接口、医保平台这类强合规场景,盲目上自动化反而增加风险——人工双人复核那步,暂时还真不能砍。
说白了,自动化不是为了炫技,是为了解决重复、易错、耗时的环节。脚本写得再花哨,不如先让一次部署不掉链子来得实在。