请写一篇关于【如何自动化脚本?】的技术文章
上周五晚上11点,我瘫在出租屋的破沙发上,盯着屏幕上还在跑的部署脚本,手机突然震动。是老婆发来的消息:“今天又加班到这么晚?明天还来得及见面吗?”
我苦笑了一下,回了个“应该能”,其实心里根本没底。
这已经是这个月第3次临时取消周末约会了。上个月我们说好去吃那家她念叨半年的日料,结果因为线上项目出 bug,我在公司通宵到第二天中午。她一个人坐在餐厅等了快两个小时,最后默默点了份外卖回家。
异地恋本来就难,再加上创业公司的不确定性,简直雪上加霜。房租3500,工资卡余额不到8000,而我的心态,早就被“资源紧张、运营救火、项目延期”这几个词磨得千疮百孔。
但就在那个周五深夜,我突然意识到:不是我没时间陪她,而是我把太多时间浪费在重复性操作上了。
被“人肉运维”榨干的前端
先简单介绍一下我自己:29岁,前端开发,去年十月加入一家做 SaaS 工具的创业公司。当时 HR 跟我说:“我们虽然小,但节奏快、成长快,你来了就是核心。” 我信了,还跟老婆说:“等我在这边稳定下来,就申请调岗或者远程,结束异地。”
现实啪啪打脸。
入职不到三个月,公司资金链就出了问题。CTO 跑了,后端只剩一个实习生,老板天天拉着我们开“战略对齐会”,其实就是催进度。前端就我一个,还要兼做一部分 DevOps 和 QA 的活儿。
最离谱的是,我们的项目上线流程居然是这样的:
- 手动打包前端代码(
npm run build) - 登录服务器(用老旧的 FTP 客户端!)
- 删除旧文件夹
- 上传新文件
- 清除 CDN 缓存(去 Cloudflare 后台点按钮)
- 回到运营同事的 Excel 表里手动更新“上线时间”
- 微信群里 @ 运营负责人:“上线了,可以测了”
每周至少3次。有时候运营半夜发消息:“老板说要加个 banner,明天早上9点前必须上线!” 我就得爬起来操作。
有一次,我手滑删错了生产环境的 index.html,整个官网挂了20分钟。老板在群里@我:“你怎么搞的?这种低级错误!” 我憋着火回:“要不您来操作试试?”
当然,这话我没敢真发。我只是默默修好,然后凌晨两点躺在床上,盯着天花板想:为什么我要把时间花在这种毫无技术含量的事情上?
自动化不是魔法,而是自救
转机出现在今年3月。
那天我又在手动部署,老婆打电话过来,声音有点哽咽:“你说好的今天视频,现在都11点半了……” 我手一抖,FTP 上传中断,又得重来。
挂掉电话后,我盯着 Terminal 里闪烁的光标,突然怒从心头起——老子不干了!
不是辞职,是不再做人肉脚本。
我花了整个周末,把自己关在屋里,泡了三壶咖啡,开始研究自动化部署。目标很明确:以后所有上线,一条命令搞定,再也不用手动碰服务器。
第一步:识别“可自动化的资源”
很多人一提自动化,就想到 CI/CD、GitHub Actions、Jenkins。但对我这种单兵作战的前端来说,那些太重了。
我先列出了所有重复性操作涉及的“资源”:
- 代码资源:前端项目(Vue 3 + Vite)
- 服务器资源:一台阿里云 ECS(Ubuntu 20.04)
- CDN 资源:Cloudflare
- 运营资源:一个 Google Sheet(记录每次上线版本、时间、负责人)
这些资源之间原本靠“人肉”串联,现在我要用脚本把它们串起来。
第二步:用最简单的工具解决最痛的问题
我没用 fancy 的工具链,就用最熟悉的 Bash + Node.js。
1. 自动打包 & 上传
写了个 deploy.sh:
#!/bin/bash
echo "📦 开始构建项目..."
npm run build
echo "📤 上传到服务器..."
scp -r dist/* user@your-server-ip:/var/www/html/
echo "✅ 部署完成!"
但 SCP 每次都要输密码,烦死了。于是配了 SSH 免密登录(生成公钥扔到服务器的 ~/.ssh/authorized_keys)。
2. 自动刷新 CDN
Cloudflare 有 API!我用 Node.js 写了个小脚本 purge-cf.js:
const axios = require('axios');
async function purgeCache() {
await axios.post(
'https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/purge_cache',
{ purge_everything: true },
{
headers: {
'Authorization': `Bearer ${process.env.CF_API_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
console.log('🧹 CDN 缓存已清除');
}
purgeCache();
然后在 deploy.sh 末尾加上:
node purge-cf.js
3. 自动通知运营
运营同事老李总抱怨:“你们上线也不说一声,我怎么知道什么时候能测?” 以前我都是微信手动@他。
现在,我让他共享了一个 Google Sheet 的 API key(其实是用 Google Apps Script 暴露了一个 webhook),然后在部署脚本最后加了一段:
curl -X POST https://script.google.com/macros/s/.../exec \
-d "version=v$(date +%Y%m%d-%H%M)&operator=前端小王"
老李的表格里自动就多了一行记录,连备注都带上了。
老婆说我变了
脚本跑通那天,我激动得差点跳起来。测试了三次,全部成功。整个过程从原来的15分钟缩短到40秒,而且零出错。
更重要的是——我不用再半夜爬起来部署了。
上周六,我准时出现在高铁站,老婆看到我时眼睛都亮了:“你真的来了?”
我说:“不仅来了,以后每周都能来。”
她不信:“你们公司不是天天救火吗?”
我笑着说:“火是我自己点的,现在我把灭火器自动化了。”
她听不懂,但看我轻松的样子,也笑了。
自动化的本质:把人从重复中解放出来
很多人觉得自动化是“高级工程师”的事,小公司没必要搞。但我想说:越是资源紧张的小团队,越需要自动化。
为什么?
因为小团队没有冗余人力。一个人干三个人的活,如果还靠手工操作,迟早 burnout。而自动化,本质上是一种“时间杠杆”——你花2小时写脚本,未来省下200小时。
在我的案例里,自动化直接带来了三个好处:
- 释放人力资源:我不再被琐碎操作绑架,能专注真正有价值的开发。
- 降低运营风险:人为失误减少,上线更稳定,老板也不再半夜@我。
- 加速项目迭代:以前一天最多上线2次,现在随时可发,产品试错更快。
而且,这些脚本并不复杂。Bash + curl + 几个 API 调用,搞定90%的场景。不需要 Kubernetes,不需要 ArgoCD,够用就行。
给同样处境的你的建议
如果你也在创业公司,一个人扛着前端、运维、甚至部分后端,听我一句:
别忍了,动手写脚本。
从最小的痛点开始。比如:
- 每次都要手动改配置文件?写个脚本自动替换。
- 测试环境经常崩?写个一键重启脚本。
- 运营要数据报表?用 Puppeteer 自动截图发邮件。
记住:自动化不是为了炫技,而是为了夺回你的时间。
而时间,是你最稀缺的资源——无论是对公司,还是对你异地恋的另一半。
写在最后:技术人的尊严
去年公司倒闭那天,我和几个同事在楼下抽烟。老板红着眼说:“对不起大家,我已经尽力了。”
我没怪他。创业本就九死一生。但我怪自己——为什么当初不早点把流程自动化?如果上线效率高一点,如果 bug 少一点,如果团队能更专注产品而不是救火,是不是结局会不一样?
现在我在新公司,月薪从15k涨到了22k。面试时我特意问:“团队有自动化部署流程吗?” 对方愣了一下,说:“没有,但你可以建。”
我笑了:“好,那我来了。”
我不是什么大牛,只是个被现实毒打过的普通前端。但我知道,真正的技术价值,不是写出多炫的动画,而是让系统更可靠,让人活得更像人。
所以,别再当人肉 cron job 了。
写个脚本,给自己放个假。
然后,去见那个等你的人。
附:我的简易自动化脚本模板(可直接参考)
#!/bin/bash # deploy.sh set -e # 遇错即停 echo "🚀 开始部署 $(date)" # 1. 构建 npm run build # 2. 上传 scp -r dist/* user@server:/var/www/html/ # 3. 清 CDN node scripts/purge-cf.js # 4. 通知运营 curl -s -X POST "https://script.google.com/.../exec" \ -d "version=v$(date +%Y%m%d-%H%M)&operator=$(whoami)" echo "🎉 部署完成!"环境变量记得用
.env管理,别把 token 提交到 Git!—— 一个不想再错过周末约会的前端

评论 0