circleci将nodejs部署到多个服务器(通过ssh)

y0u0uwnf  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(197)

我有下面的config.yml文件供circleci在我的digitalocean droplet上构建和部署一个nodejs应用程序:

version: 2.1
jobs:
  build:
    docker:
      - image: cimg/node:16.13.2
    steps:
      - checkout
      - run:
          command: npm install
          name: npm install
      - run:
          command: npm run build
          name: npm build
      - persist_to_workspace:
          root: ~/
          paths:
            - .
  deploy:
    docker:
      - image: cimg/base:2021.04
    steps:
      - attach_workspace:
          at: ~/
      - add_ssh_keys:
          fingerprints:
            - "$SSH_FINGERPRINT"
      - run:
          name: ssh
          command: scp -o StrictHostKeyChecking=no -r dist/* "$SSH_USER@$SSH_HOST:/var/www"
workflows:
  build-and-deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build

这工作正常,但它是一个小应用程序。我目前正在为一个项目构建一个更大的nodejs后端,关于再次使用config.yml,我有两个问题:
1.可以在构建作业期间运行npm install吗(在构建服务器上),然后用scp将其复制到node_modules和所有已经存在的东西的服务器上?或者我应该直接通过ssh进入服务器,执行git pull命令并部署它?最快/最便宜/最安全的解决方案是什么?
注意:我不需要npm run build命令,因为它没有静态网站。
1.如何将其一次部署到多个服务器?

dgiusagp

dgiusagp1#

是否可以在构建作业期间运行npm install(在构建服务器上),然后使用scp将其复制到node_modules和所有已经存在的东西的服务器上?或者我应该直接用ssh进入服务器,执行git pull命令并部署它?最快/最便宜/最安全的解决方案是什么?
使用最快的解决方案。因为最快的也是最便宜和最安全的。
一般来说,在构建中生成工件。简而言之,您在构建服务器上 checkout 修订,然后将其转换为包含完整应用程序的单个包文件。这个工件永远不会再被更改,它包含了运行应用程序的所有代码。
然后,您可以根据自己的意愿,在任意数量的服务器上部署任意版本(发行版)的工件,而不需要对代码进行更多的处理。在这里,您可以再次完全专注于速度,因为没有更多的构建,您可以选择传输协议和其他形式的通信,以完全满足您的需求,包括部署。随着时间的推移保持和改善健身。最重要的是,部署是自动的、故障安全的、快速的、可复制的和可恢复的。

相关问题