大家好,我是凌览。
如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连(点赞、评论、转发),给我一些支持和鼓励谢谢。
Jenkins 是个开源的持续集成工具,界面好用,操作也简单,项目开发里用得特别多。能自动化搞构建、测试、部署,确实挺牛逼的。
但你要是一人公司,不建议用,原因有二:
- 运维太费劲:你一个人身兼产品、开发、运营、推广......什么活都得干。Jenkins 不是装完就完事的------插件冲突、磁盘爆满、升个级流水线直接崩。一个人搞这些,时间全耗进去了。
- 太重了:至少 4G 内存、几十 G 硬盘才能跑顺。每个月花几十块服务器钱,就为了跑个自动部署,不值当。
所以我的建议很简单:除非你团队多人、流水线复杂到非 Jenkins 不可,否则别碰它。一人公司的核心是活下去、跑得快,不是伺候工具。
那如何部署呢,我是这样做的------用本地自动化脚本替代Jenkins
第一步:本地打包推送远程
首先装个 Docker,把项目 Docker 化。
比如去水印下载鸭,就是用 Docker 部署的。前、后端全部打包进入一个镜像。
Dockerfile文件:
docker
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"]
然后执行打包命令:
bash
docker buildx build --platform linux/amd64 -t 镜像名 --push .
为什么要指定 --platform linux/amd64?因为本地电脑一般是 Windows 或 macOS,线上服务器跑的是 Linux。不指定的话,Docker 按本机架构打包,传到服务器上就起不来了。
--push . 就是把镜像推到远程仓库。远程仓库我用的是阿某云的容器镜像服务,个人版免费

至于怎么配置推送到阿某云的容器镜像服务,官方文档写得很清楚,跟着走一遍就行。
推送成功后,你在任何一台机器上都能 docker pull xxx 把镜像拉下来跑。
第二步:本地连接服务器
ssh2 是一个 Node.js 工具包,专门用来连远程服务器。
连上之后,把 docker run 命令丢给它,它就能帮你在服务器上跑起来。
jsx
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 很好,但不是每个项目都需要它。如果你的团队只有你一个人,项目也没复杂到需要几十个构建节点,那完全没必要给自己加负担。工具是拿来用的,不是拿来伺候的。
够用就好。