master
分支)。这是我在互联网上找到的两种最常用的方法:
在生产服务器上运行
git pull
,运行所需的任何构建任务(npm install
,minify等),然后重新启动服务在CI / CD服务器上构建源代码,将构建的工件同步到生产服务器并重新启动
令人惊讶的是,我在Internet上找到的大多数示例都使用方法1。此方法要求生产服务器具有公共Internet访问权限,这在许多情况下可能是不可能的。
我的问题:方法1是真正将NodeJS应用程序部署到生产服务器的最佳方法?如果是,原因是什么?
#1 楼
互联网上有很多不好的例子。做一个git pull
来分发代码对于开发来说是很棒的,但是在实践中容易出现各种各样的问题。如果不仔细考虑负面影响,则不应将其用于生产部署。当有人签出其他分支时会发生什么?当您继续
git pull
并没有任何新内容出现时,您会很难过。如何验证计算机是否正在运行预期的版本?您可以从
git
获得此功能,但是对于大多数工件系统而言,它更容易。如何释放到具有空缺网络的计算机上?对您来说,在专用网络上模拟
git
服务器将是一个有趣的时光。我不确定
npm
用于工件的格式,但是备份它们可能也是一个好主意。 CI / CD服务器,并使用一组专用的机器来提供工件。如果您一次旋转100台计算机,您的CI / CD服务器会处理它还是倒下?隔离工件服务将避免CI / CD服务器被淹没并且在部署结束之前无用。评论
我认为,git pull应该发生在prod分支上。如果要推送到另一个分支,则对于CI来说应该是非实体。但是,我同意在没有人工监督的情况下对产品进行CI可能太勇敢了。但这对于演示/测试系统来说是不可能的。
–peterh-恢复莫妮卡
19年3月11日在9:38
评论
如果生产服务器无法访问Internet,则也无法rsync。如果使用物理介质,则可以使用其中任何一种方法;)