代码之家  ›  专栏  ›  技术社区  ›  user3142695

nodeJS/GitlabCI:如何为分散的生产应用服务

  •  1
  • user3142695  · 技术社区  · 6 年前

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

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

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

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

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

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Elliot Blackburn    6 年前

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

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

    您可以使用很多东西作为远程存储位置,比如某种awss3 bucket,或者更复杂的东西,比如 Nexus (有很多免费的选择)。

    然后,您需要让您的客户访问此存储位置(如果您使用的是类似S3或数字海洋块存储等的内容),或者访问您的分发存储库(如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.