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