【问题标题】:nodeJS/GitlabCI: How to serve decentralized productive applicationnode JS/Gitlab CI:如何为分散的生产应用程序提供服务
【发布时间】:2018-08-06 22:39:29
【问题描述】:

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

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

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

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

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

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

也许我只见树木不见森林……这就是我寻求帮助/提示的原因。

【问题讨论】:

  • 我不明白这与使用 git repo 提供的软件的任何其他公司有何不同。你是负责他们的部署还是只负责开发?您是否在问如何利用钩子告诉公司更新和部署他们自己的实例?为您提供有关如何解决此问题的建议似乎过于宽泛。请说明您想要的工作流程以及我们如何帮助您解决/实施它。

标签: node.js express gitlab next.js


【解决方案1】:

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

  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 映像并自托管一个 docker 注册表。构建映像后推送到该注册表,这将结束您的 CI 运行。

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

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

【讨论】:

  • 感谢您的出色回答。这正是我一直在寻找的。只有一个问题:在我的 gitlab CI 中,我正在运行构建。现在我需要从构建的文件中获取一个 zip 文件。我猜那些被称为文物,对吧?然后我想将 zip 文件上传到我自己的 ftp 服务器
  • 如果这个答案是正确的,你能把它标记为将来对其他人是正确的吗? Ti 回答您的问题,是的,您可能需要一个类似于“package_artifact”的构建步骤,它将找到您希望捆绑在一起的所有文件,将它们压缩,并告诉 GitLabCI 它们是一个工件。然后您可能会有一个步骤,然后是“publish_artifact”,它将它们推送到某个位置,例如 FTP 服务器。
猜你喜欢
  • 2020-07-02
  • 2016-03-04
  • 2018-06-06
  • 2015-05-13
  • 2021-05-06
  • 2014-07-10
  • 1970-01-01
  • 2019-05-29
  • 2016-06-26
相关资源
最近更新 更多