nodeJS / GitlabCI:如何为去中心化生产应用提供服务

时间:2018-08-06 14:06:12

标签: node.js express gitlab next.js

我正在使用nextJS和expressJS应用程序开发一个nodeJS应用程序。而且我正在使用自己的gitlab实例来管理git存储库。

但是,当前应用程序不应在最后部署到Web服务器,但是我需要创建去中心化的生产性应用程序。为了使它更清晰:

  1. 在本地开发应用程序
  2. 将应用程序推送到我的远程服务器上
  3. 我的客户应该能够从我的删除服务器上获得高效的应用程序代码
  4. 客户将在本地环境上运行该应用程序-应该能够从删除服务器中提取新版本

因此,应用程序本身不会在我的远程服务器上运行,而是在客户的本地服务器上运行。

通常,我将使用CI来测试和构建应用程序(这由npm run build完成)。然后,我构建一个docker镜像,用于在服务器上运行该应用程序。但是所有这些通常都可以在同一服务器上进行。

在这种情况下,我需要构建应用程序并将其提供给客户/客户应该能够提取有效的代码。该怎么做。

也许我看不见树木的树林...这就是为什么我要帮助/提示。

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式执行此操作,也可以使用多种工具。您可能想要类似于以下内容的管道。

  1. 代码在本地开发,提交并推送到自托管的gitlab。
  2. GitLab CI,(或配置的任何其他CI)将运行您的代码的CI。
  3. 配置项的最后一步是创建应用程序的“捆绑包”。这可能是.zip或类似文件,并且将被推送到远程存储位置。也可以确保仅在推送到特定分支(例如master)时才执行此操作。

您可以将许多东西用作远程存储位置,例如某种AWS S3存储桶,或更复杂的东西(例如Nexus(有很多免费的替代品)。

然后,您想让客户访问此存储位置(如果您使用的是S3或Digital Ocean Block Storage等),或访问您的分发存储库(例如Nexus)。

您应该能够生成某种SSH密钥,可以将其放置在GitLabCI服务器上并用于发布到这些位置。然后应该是进行HTTP调用以将文件上传到相关源的简单情况。当一切都成功完成时,通常仅针对特定分支机构,才调用此方法。例如,如果所有测试都通过并且您在master分支上,则将所有代码压缩并进行HTTP调用,以将新的zip文件推送到客户可以访问的AWS S3。

有关进一步的想法,您可以根据需要分配存储/分发位置到FTP服务器或本地网络驱动器中。如果您只是为您的客户处理docker,那么我建议您构建一个Docker映像并自托管一个Docker注册表。生成映像后,推送到该注册表,这将是CI运行的结束。

请注意,如果您的客户使用的是docker,则可以创建docker映像,将其推送到注册表或将其导出为.tar并将其上载到文件存储位置(例如S3)。这样可以简化您的客户的工作,并确保您控制图像创建步骤(如果要管理的话)。

The gitlab ci docs might help you with the specifics of uploading artifacts to various locations.