一人公司別再上 Jenkins,真的不值得

大家好,我是凌覽。

如果本文能給你提供啟發或幫助,歡迎動動手指,一鍵三連(按讚留言轉發),給我一些支持和鼓勵,謝謝。


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 . 就是把映像推到遠端倉庫。遠端倉庫我用的是某雲的容器映像服務,個人版免費

image.png

至於怎麼設定推送到某雲的容器映像服務,官方文件寫得很清楚,照著走一遍就行。

推送成功後,你在任何一台機器上都能 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 幫你寫就行,放這裡只是示範一下思路。

一個簡簡單單的自動化部署就成了,對一人公司來說完全夠用。

總結

回過頭來看,這套方案其實就幹了兩件事:

  1. 本地打包映像,推到某雲映像倉庫
  2. 寫個腳本連伺服器,把映像拉下來跑起來

沒有 Jenkins,不用搞什麼外掛、權限、流水線設定。一個 Dockerfile 加一個部署腳本,就把 CI/CD 的核心流程跑通了。

Jenkins 很好,但不是每個專案都需要它。如果你的團隊只有你一個人,專案也沒複雜到需要幾十個建置節點,那完全沒必要給自己加負擔。工具是拿來用的,不是拿來伺候的。

夠用就好。


原文出處:https://juejin.cn/post/7654166345454829619


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝14   💬2   ❤️1
745
🥈
我愛JS
📝1   ❤️1
68
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登