GitLab runner Angular 依赖项

GitLab runner Angular dependencies

我想配置自动构建和部署 Angular 应用程序的运行程序。为此,我必须在构建或部署之前使用 npm install 安装项目依赖项,因为它们未存储在存储库中。问题是这是一个非常缓慢的过程,所以我必须等待大约 5 分钟才能完成该过程并部署应用程序。

是否可以稍微避免这种情况?可以全局安装所有项目依赖项,但远非理想。

见面GitLab's CI cache!

您可以使用它,例如共享您的 node_modules 文件夹。 运行 npm install 一旦存在依赖项,将在需要时进行更新。

这里你有an example project with Angular使用:

cache:
  paths: 
    - node_modules/

您可以在哪里比较 2 个阶段的执行时间 (https://gitlab.com/solidgear-projects/GitlabCI/pipelines/11759264):

  • 第一阶段:8分25秒
  • 第二阶段:56 秒 自“Successfully extracted cache
  • 之后

请注意,cache 仅用于在作业之间共享内容(您提到您有一个用于构建,一个用于部署)。

要在不同构建(管道)之间共享内容,我建议您阅读 https://about.gitlab.com/2017/07/11/dockerizing-review-apps/,其中提供了一些有关如何使用 docker 图像将应用程序的所有依赖项捆绑在一个文件中的提示基础图像并在将来为您的构建重用它。例如

build_base:
    stage: build
    image: docker
    services:
        - docker:dind
    before_script:
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD registry.gitlab.com
        - docker pull registry.gitlab.com/your-name/your-project:base
    script:
        - docker build -t registry.gitlab.com/your-name/your-project .
        - docker push registry.gitlab.com/your-name/your-project:base
    when: manual

我遇到了同样的问题,最后我做的是:

  1. node_modulespackage.json 复制到外部文件夹中,在每次提交时都不会被覆盖
  2. 在我的任务中,我做的第一件事是在项目根文件夹中创建一个名为 node_modules 的符号链接,指向外部 node_modules 文件夹
  3. 我检查项目 package.json 和外部位置的差异。如果它们不同,我 运行 npm install 并更新外部 node_modulespackage.json
  4. 运行,构建,...随便什么。不要忘记将 --preserve-symlinks 选项添加到您的构建或服务命令中

使用此设置,与之前 3 分钟以上相比,我现在的构建时间为 47 秒。