请写一篇关于【如何自动化脚本?】的技术文章

◆高思远
2025-12-25 08:06
阅读 2045

上周五晚上11点,我瘫在出租屋的破沙发上,盯着屏幕上还在跑的部署脚本,手机突然震动。是老婆发来的消息:“今天又加班到这么晚?明天还来得及见面吗?”

我苦笑了一下,回了个“应该能”,其实心里根本没底。

这已经是这个月第3次临时取消周末约会了。上个月我们说好去吃那家她念叨半年的日料,结果因为线上项目出 bug,我在公司通宵到第二天中午。她一个人坐在餐厅等了快两个小时,最后默默点了份外卖回家。

异地恋本来就难,再加上创业公司的不确定性,简直雪上加霜。房租3500,工资卡余额不到8000,而我的心态,早就被“资源紧张、运营救火、项目延期”这几个词磨得千疮百孔。

但就在那个周五深夜,我突然意识到:不是我没时间陪她,而是我把太多时间浪费在重复性操作上了


被“人肉运维”榨干的前端

先简单介绍一下我自己:29岁,前端开发,去年十月加入一家做 SaaS 工具的创业公司。当时 HR 跟我说:“我们虽然小,但节奏快、成长快,你来了就是核心。” 我信了,还跟老婆说:“等我在这边稳定下来,就申请调岗或者远程,结束异地。”

现实啪啪打脸。

入职不到三个月,公司资金链就出了问题。CTO 跑了,后端只剩一个实习生,老板天天拉着我们开“战略对齐会”,其实就是催进度。前端就我一个,还要兼做一部分 DevOps 和 QA 的活儿。

最离谱的是,我们的项目上线流程居然是这样的:

  1. 手动打包前端代码(npm run build
  2. 登录服务器(用老旧的 FTP 客户端!)
  3. 删除旧文件夹
  4. 上传新文件
  5. 清除 CDN 缓存(去 Cloudflare 后台点按钮)
  6. 回到运营同事的 Excel 表里手动更新“上线时间”
  7. 微信群里 @ 运营负责人:“上线了,可以测了”

每周至少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小时。

在我的案例里,自动化直接带来了三个好处:

  1. 释放人力资源:我不再被琐碎操作绑架,能专注真正有价值的开发。
  2. 降低运营风险:人为失误减少,上线更稳定,老板也不再半夜@我。
  3. 加速项目迭代:以前一天最多上线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

最热最新
暂无评论
◆高思远Lv.1
0
影响力
0
文章
0
粉丝