大家好,我是凌览。
- 个人网站:blog.code24.top
- 去水印下载鸭:nologo.code24.top 想存个视频、图片却要被水印糊脸?试试这个,登录都不用
如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连(点赞、评论、转发),给我一些支持和鼓励谢谢。
Jenkins 是个开源的持续集成工具,界面好用,操作也简单,项目开发里用得特别多。能自动化搞构建、测试、部署,确实挺牛逼的。
但你要是一人公司,不建议用,原因有二:
- 运维太费劲:你一个人身兼产品、开发、运营、推广……什么活都得干。Jenkins 不是装完就完事的——插件冲突、磁盘爆满、升个级流水线直接崩。一个人搞这些,时间全耗进去了。
- 太重了:至少 4G 内存、几十 G 硬盘才能跑顺。每个月花几十块服务器钱,就为了跑个自动部署,不值当。
所以我的建议很简单:除非你团队多人、流水线复杂到非 Jenkins 不可,否则别碰它。一人公司的核心是活下去、跑得快,不是伺候工具。
那如何部署呢,我是这样做的——用本地自动化脚本替代Jenkins
第一步:本地打包推送远程
首先装个 Docker,把项目 Docker 化。
比如去水印下载鸭,就是用 Docker 部署的。前、后端全部打包进入一个镜像。
Dockerfile文件:
FROM node:24-slim ENV TZ=Asia/Shanghai WORKDIR /app COPY package*.json ./ RUN npm config set registry https://registry.npmmirror.com/ && npm install --omit=dev --verbose COPY .env ./ COPY server/ server/ COPY front-end/ front-end/ VOLUME ["/app/server/db", "/app/logs", "/app/ssl"] EXPOSE 3000 3443 CMD ["npm", "start"]然后执行打包命令:
dockerbuildx build--platformlinux/amd64-t镜像名--push.为什么要指定--platform linux/amd64?因为本地电脑一般是 Windows 或 macOS,线上服务器跑的是 Linux。不指定的话,Docker 按本机架构打包,传到服务器上就起不来了。
--push .就是把镜像推到远程仓库。远程仓库我用的是阿某云的容器镜像服务,个人版免费
至于怎么配置推送到阿里云的容器镜像服务,官方文档写得很清楚,跟着走一遍就行。
推送成功后,你在任何一台机器上都能docker pull xxx把镜像拉下来跑。
第二步:本地连接服务器
ssh2是一个 Node.js 工具包,专门用来连远程服务器。
连上之后,把docker run命令丢给它,它就能帮你在服务器上跑起来。
const { Client } = require('ssh2'); require('dotenv').config(); const cfg = { ssh: { host: process.env.DEPLOY_HOST, port: 22, username: 'root', password: process.env.DEPLOY_PASSWORD, }, docker: { name: 'my-app', image: 'registry.cn-hangzhou.aliyuncs.com/my-project/my-app:latest', port: '80:3000', }, }; const conn = new Client(); conn.on('ready', () => { console.log('连上服务器了,开始部署...'); conn.exec('docker pull ' + cfg.docker.image, (err, stream) => { if (err) throw err; stream.on('close', () => { conn.exec('docker rm -f ' + cfg.docker.name + ' || true', () => { conn.exec( 'docker run -d --name ' + cfg.docker.name + ' -p ' + cfg.docker.port + ' --restart=on-failure:4 ' + cfg.docker.image, () => { console.log('部署完成!'); conn.end(); } ); }); }); }); }); conn.connect(cfg.ssh);上面这段是伪代码,直接让 AI 帮你写就行,放这里只是演示一下思路。
一个简简单单的自动化部署就成了,对一人公司来说完全够用。
总结
回过头来看,这套方案其实就干了两件事:
- 本地打包镜像,推到阿某云镜像仓库
- 写个脚本连服务器,把镜像拉下来跑起来
没有 Jenkins,不用搞什么插件、权限、流水线配置。一个Dockerfile加一个部署脚本,就把 CI/CD 的核心流程跑通了。
这就是一人公司的优势——不需要一个庞大的系统来解决一个小问题。
Jenkins 很好,但不是每个项目都需要它。如果你的团队只有你一个人,项目也没复杂到需要几十个构建节点,那完全没必要给自己加负担。工具是拿来用的,不是拿来伺候的。
够用就好。