【问题标题】:How to store node modules between jobs and stages in gitlab with continuous integration如何通过持续集成在 gitlab 中的作业和阶段之间存储节点模块
【发布时间】:2019-09-22 19:56:21
【问题描述】:

我是 GitLab CI 的新手,我一直在尝试不同的方法来在我的整个管道中使用 node_modules 目录。从我在official docs 中读到的内容来看,缓存和工件似乎是在作业之间传递文件的有效方法:

cache 用于指定文件和目录的列表 在作业之间缓存。您只能使用位于 项目工作区。

但是,我对缓存方法的问题是node_modules 默认情况下会在管道之间保留:

  • 缓存可以全局和每个作业设置。
  • 从 GitLab 9.0 开始,缓存默认启用并在管道和作业之间共享。

我不想在管道之间保留node_modules。我真正想要的是在我的设置阶段使用 npm 触发全新安装,然后允许管道中的所有进一步作业使用这些模块。因此,我开始使用工件而不是缓存,其描述类似:

artifacts 用于指定文件和目录的列表 成功后应依附于工作。 [...]

工件将在作业完成后发送到 GitLab 成功并且可以在 GitLab UI 中下载。 依赖特性应与工件结合使用 并允许您定义要在不同作业之间传递的工件。

artifact-dependency 方法在我的情况下似乎是可用的。但是,缓存和工件都非常低效和缓慢。 node_modules 已安装并可使用,但整个目录随后会上传某处,并在每个作业之间重新下载。 (我真的很想知道这里发生了什么......模块去哪里了?)

有没有更好的方法在管道开始时只运行一次npm install,然后在整个运行时将node_modules 保留在管道中?我不想在所有作业完成后保留node_modules,这样就不需要在任何地方上传或下载它们。

用于重现行为的示例管道配置文件:

image: node:lts

stages:
  - setup
  - build
  - test

node:
  stage: setup
  script:
    - npm install
  artifacts:
    paths:
      - node_modules/

build:
  stage: build
  script:
    - npm run build
  dependencies:
    - node

test:
  stage: test
  script:
    - npm run lint
    - npm run test
  dependencies:
    - node

【问题讨论】:

    标签: node.js gitlab node-modules gitlab-ci


    【解决方案1】:

    模块去哪了?

    默认情况下,工件保存在主gitlab machine

    /var/opt/gitlab/gitlab-rails/shared/artifacts

    有没有更好的方法在管道开始时只运行一次 npm install ,然后在整个运行时将 node_modules 保留在管道中?

    您可以尝试一些选项:

    1. 将设置和构建阶段合并到一个阶段。

    2. Local npm cache 在构建器机器上。更快npm install 倍。或使用私有 npm 代理注册表(例如 - Nexus/Artifactory)

    3. 检查gitlab主机和构建器是否在同一个网络,这样上传/下载会更快

    4. 考虑将您的构建打包到 docker 中。您将在 gitlab 阶段之间获得可重用的 docker 图像。 (当然,将图像上传到 docker 注册表会产生开销)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 2019-11-28
      • 1970-01-01
      • 2021-04-17
      • 2022-01-26
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多