nodeJS/GitlabCI: 如何服务去中心化的生产性应用

nodeJS/GitlabCI: How to serve decentralized productive application

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

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

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

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

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

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

也许我只见树木不见森林...这就是为什么我要求help/hints。

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

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

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

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

您应该能够生成某种 SSH 密钥,您可以将其放在 GitLabCI 服务器上并用于发布到这些地方。然后,它应该是一个简单的案例,即进行 HTTP 调用以将文件上传到相关源。当一切都成功时,这通常会被调用,并且只针对特定的分支。例如,如果您的所有测试都通过并且您在主分支上,则压缩所有代码并进行 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.