我有一个Angular 2(虽然我的问题适用于任何具有部署构建过程的框架/技术)项目,我使用谷歌云虚拟机来托管应用程序。每当我有一个稳定的版本时,我就会遵循标准的部署过程 - 我将本地文件推送到github,从远程VM拉出并运行构建脚本 - 尽管这对于网页来说似乎不是一个非常好的过程或生产中的Web应用程序,因为它会脱机,除非我将调用重定向到没有停机时间。此外,使用App Engine或Heroku时,构建需要花费太多时间。但问题是:如果我只是上传构建的文件而不在git中忽略它们,这会使服务器立即响应新文件而不会停机,期望我不会看到人们这样做。
我的主要问题是为什么不经常这样做?是否有做或不做的最佳实践以及有关此的任何文档?我无法找到与此相关的任何内容。
提前致谢。
答案 0 :(得分:0)
好吧,如果您使用VM,您肯定可以在服务器上构建。但重点是,您拥有自己的开发环境,生产环境以及构建环境。据推测,他们都是不同的机器。因此,构建发生在CI / CD上 - 例如詹金斯。如果您没有它,您的工作站就是构建机器。因此,您需要测试,构建,并在构建应用程序时,只需部署已编译的软件包。
现在,如果你需要做一些奇特的事情(如果你这样做,你知道如何),你可能需要生产服务器上的源。但在大多数情况下,您的应用程序是一堆静态文件,您需要以某种方式提供服务。您可以通过将这些捆绑包复制到USB驱动器并转到数据中心并复制到服务器来进行部署,以便所有服务器都可以进行维护。
现在,为什么人们会这样做或不这样做?嗯,一般来说,更大的团队会有一些严格的构建/部署程序,如果你不想踩到人们的脚趾,你就会遵循它。所以这意味着有时会有一个构建服务器。即使您的Google VM就是这样,它只意味着VM有两个工作 - 构建和提供应用程序。较小的团队,独立商店,你经常不关心任何这样的开销。我建议将任务自动化为npm脚本(因此,npm run deploy.prod
构建应用程序并推送到谷歌并可能触发一些缓存刷新或其他),因为这可以减少错误。无论你在哪里建造。但是,如果您单独运行,则可能不需要单独的构建计算机。另一个原因可能是人们部署完整的堆栈应用程序,因此他们必须“构建”后端部分,例如,无论如何,在服务器上的节点,所以它都是一个更大的过程的一部分。但如果只是前端,你就不必这样做了。
因此,它取决于团队之间,项目之间的差异。