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



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

但当前的应用程序最终不应该部署到Web服务器上,但我需要创建去中心化的生产应用程序。为了更清楚一点:

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

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

通常,我会使用我的CI来测试和构建应用程序(由npm run build完成(。然后我构建了一个docker镜像,用于在服务器上运行应用程序。但在同一台服务器上工作是正常的。

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

也许我看不见木头而看不见树。。。这就是我寻求帮助/提示的原因。

有很多方法可以做到这一点,也可以使用一些工具。您可能想要一个类似于以下内容的管道。

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

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

然后,您会希望让您的客户访问此存储位置(如果您使用的是S3或Digital Ocean Block storage等(,或者访问您的分发存储库(如Nexus(。

您应该能够生成某种SSH密钥,可以将其放在GitLabCI服务器上并用于发布到这些地方。然后,它应该是一个简单的情况,即进行HTTP调用以将文件上传到相关源。当一切都很成功时,通常会这样称呼,而且只针对特定的分支机构。例如,如果你的所有测试都通过了,并且你在主分支上,那么压缩你的所有代码,并进行HTTP调用,将新的zip文件推送到你的客户可以访问的AWS S3。

对于进一步的想法,如果愿意,您可以将您的存储/分发位置设置为FTP服务器,或者根据您的分发需求设置为本地网络驱动器。如果你只是为你的客户处理docker,那么我建议你建立一个docker镜像并自行托管一个Dockerregistry。在构建映像后,推送到该注册表,这将是CI运行的结束。

附带说明一下,如果您的客户正在使用docker,您可以创建一个docker映像,将其推送到注册表,或者将其导出为.tar并上传到文件存储位置(例如S3(。这将使您的客户的事情变得简单,并确保您控制图像创建步骤(如果这是您想要管理的事情(。

gitlab-ci文档可能会帮助您将工件上传到不同位置。

最新更新