部署工具的一些思考:一个30岁转行程序员的深夜复盘
去年十月的一个周五晚上,我在光谷软件园B2栋加班到快十点。窗外的关山大道早已车流稀疏,办公室里只剩下我和隔壁工位的小王还在对着屏幕敲代码。那天我们俩都在为一个前端项目上线焦头烂额——不是代码有问题,而是部署流程卡住了。
“这破 Jenkins 又挂了?”小王一边刷新控制台一边嘟囔,“我都重试三次了,还是卡在 npm install 这一步。”
我苦笑:“可能是 node_modules 缓存没清理干净,要不咱手动删一下再跑?”
“别啊哥,上次手动删完整个构建直接崩了,运维老张差点拿拖鞋抽我……”他瘫在椅子上,一脸生无可恋。
那一刻,我突然意识到:作为一个刚转行半年的前端新人,我对“部署”这件事的理解,还停留在“写完代码点个按钮就能上线”的天真阶段。而现实是,部署这个看似简单的词背后,藏着无数让人掉头发的技术选型、配置陷阱和协作摩擦。
从卖建材到写 JavaScript:我的转行之路
先简单自我介绍一下吧。我叫李伟,今年30岁,武汉本地人。去年年初之前,我干了整整七年建材销售——每天陪客户喝酒、算报价单、处理售后纠纷,月薪稳定在15k左右。听起来不错?但每天下班回家看着镜子里油腻疲惫的脸,我心里总有个声音在问:“就这样过一辈子吗?”
去年三月,老婆怀孕了。那天晚上我蹲在阳台抽烟,她走过来轻轻说:“要不……试试你一直想做的那件事?”
我说的是学编程。
其实大学时我学的是机械工程,但大二偷偷蹭过计算机系的课,对 JavaScript 特别着迷。后来工作忙就搁置了,但心里一直没放下。于是咬牙报了个线上培训班,白天上班,晚上九点后开始啃教程,周末泡在省图书馆。三个月后,我用 React 写了个简易的电商后台,投简历时附上了 GitHub 链接。
面试过程惨不忍烈。有家公司 HR 直接问我:“你都30了,能熬得住加班吗?”我笑着说:“我以前陪客户喝到凌晨三点,现在写代码到十二点算养生。”
最后靠着一股子“不要脸”的劲儿,加上几个还算像样的前端 demo,我拿到了光谷一家 SaaS 公司的 offer,起薪 18k。虽然比之前少了一点,但老婆支持我:“技术岗有成长性,三年后肯定翻倍。”
就这样,我成了光谷软件园里年龄最大的“应届生”。
第一次部署事故:我的“社死”现场
入职第三个月,我第一次独立负责一个前端模块的上线。功能很简单:用户管理页面的权限控制优化。我自认为代码写得干净利落,测试也过了,信心满满地提交了 MR(Merge Request)。
结果第二天上线时,整个页面白屏。
“怎么回事?本地跑得好好的啊!”我在会议室里急得满头大汗。
运维同事查日志发现:构建时用了开发环境的 API 地址,生产环境根本访问不到。原来我在 .env 文件里硬编码了 http://localhost:3001,而 CI/CD 流程没有正确注入环境变量。
项目经理老刘拍了拍我肩膀:“小李啊,前端不只是写页面,部署链路也得懂。不然写得再漂亮,上不了线等于零。”
那天晚上我失眠了。不是因为被批评,而是突然意识到:从前端开发到可运行的服务,中间隔着一条叫“部署”的鸿沟。而我,连这条河有多深都不知道。
深入部署工具:Vercel、Netlify、Jenkins 和 Docker 的实战对比
痛定思痛,我开始系统研究前端部署工具。正好公司也在评估要不要从传统的 Jenkins 迁移到更现代化的方案。我主动申请参与调研,老板居然同意了——可能看我太惨了吧(笑)。
下面是我踩坑后的真实体验,纯干货,不吹不黑:
1. Jenkins:老将虽迟但稳,就是太重
我们公司目前主力用 Jenkins。优点很明显:高度可定制,插件生态庞大,适合复杂流水线(比如要同时构建前端、后端、移动端)。
但缺点也扎心:
- 配置全靠手写 Groovy 脚本,语法反人类;
- 每次改 pipeline 都要重启服务;
- 对前端友好度低,比如缓存策略、静态资源 CDN 回源这些,得自己拼凑插件。
有一次我想加个 cache node_modules,折腾三天才搞定。运维老张看不下去,直接甩给我一段脚本:“抄这个,别问原理。”
适合谁?大型企业、已有 DevOps 体系、不差人力维护。
2. Vercel:Next.js 官配,开箱即用爽到飞起
为了对比,我用自己的个人博客(用 Next.js 写的)试了 Vercel。注册账号 → 关联 GitHub → 推代码 → 自动部署,全程不到五分钟。
最惊艳的是:
- 自动识别框架(React、Vue、Svelte 都支持);
- 预览部署(每个 PR 自动生成临时链接,产品经理狂喜);
- 边缘函数(Edge Functions)让 SSR 性能起飞。
而且免费额度对个人项目绰绰有余。上周我给老婆做了个婚礼照片分享站,部署完直接发链接,她惊呼:“这么快?!”
缺点?绑定太深。如果你不用它的生态(比如自定义服务器),灵活性就受限。
适合谁?个人开发者、初创团队、Next.js 重度用户。
3. Netlify:静态站点之王,表单和身份验证是彩蛋
Netlify 我也试了,和 Vercel 齐名。它对纯静态站点(比如 VuePress、Gatsby)支持极佳,还自带表单处理、身份验证(Identity)功能。
我用它部署了一个 React + TypeScript 的文档站,配合 netlify.toml 配置重定向和 headers,比 Nginx 配置直观多了。
不过构建速度偶尔抽风,国内访问有时延迟高(毕竟服务器在国外)。
适合谁?内容型网站、营销页、需要快速原型验证的团队。
4. Docker + 自建 CI:自由但痛苦
公司有个新项目尝试用 Docker 容器化部署。前端打包成静态文件,塞进 Nginx 镜像,再推到私有仓库。
听起来很酷,对吧?
但实际操作中:
- 要写 Dockerfile(前端同学谁想碰这个?);
- 构建上下文容易包含多余文件,镜像臃肿;
- 本地调试和生产环境不一致,玄学问题多。
有一次我忘了 .dockerignore,把 node_modules 打包进去了,镜像从 50MB 胖到 1.2GB,运维直接在群里@我:“李伟,你是不是对‘轻量级’有什么误解?”
适合谁?有专职 DevOps、追求完全可控的中大型团队。
我的选择:务实主义者的折中方案
经过两个月折腾,我给团队提了个建议:核心业务继续用 Jenkins(历史包袱重,不敢动),新项目用 Vercel(尤其是 Next.js 的)。
理由很简单:
- 老系统稳定压倒一切;
- 新项目追求迭代速度,Vercel 的预览部署能让产品、设计、QA 提前介入,减少返工;
- 前端同学不用再求运维配 pipeline,自主权提升,幸福感飙升。
老板居然采纳了。上个月新项目上线,从需求到生产只用了三天——要知道以前光部署联调就得两天。
写在最后:部署不是终点,而是协作的起点
回想起那个加班的夜晚,我和小王最终还是靠手动清理缓存+重跑解决了问题。走出大楼时已近午夜,光谷的路灯把影子拉得很长。他说:“你说咱们天天写 JavaScript,结果一半时间在搞部署,值吗?”
我当时没回答。但现在我想说:值,太值了。
因为部署不是“运维的事”,而是产品交付的最后一公里。作为前端开发者,如果我们只关心组件怎么写、状态怎么管,却对代码如何变成用户能用的服务一无所知,那我们只是“页面仔”,不是工程师。
转行这一年,我工资涨到了 22k,房租还是 3500(感谢武汉的房价)。但最大的收获不是钱,而是解决问题的能力——无论是写一个防抖函数,还是配一个 CI/CD 流水线。
如果你也像我一样,是从传统行业杀进编程世界的“高龄新人”,别怕。那些深夜的焦虑、会议上的尴尬、被运维嫌弃的眼神,都是成长的勋章。
前端的世界不止有 React 和 Vue,还有 Webpack、Docker、CI/CD……它们共同构成了我们交付价值的完整链条。
写好代码是基本功,让代码跑起来,才是真本事。
共勉。
—— 李伟,一个在光谷软件园努力不被淘汰的30岁前端新人
2024年6月于武汉

评论 0