GitLab运行Angular依赖项

时间:2017-09-07 09:23:35

标签: angular npm gitlab gitlab-ci

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

有可能避免这种情况吗?有可能在全球范围内安装所有项目依赖项,但这远非理想。

2 个答案:

答案 0 :(得分:1)

GitLab's CI cache

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

这里有an example project with Angular使用:

cache:
  paths: 
    - node_modules/

您可以在哪里比较两个阶段(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图像将所有应用依赖关系捆绑在一起的提示基础映像,并在将来为您的构建重用它。 e.g。

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 :(得分:0)

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

  1. node_modulespackage.json复制到外部文件夹中,每次提交都不会覆盖
  2. 在我的任务中,我所做的就是在项目根文件夹中创建一个名为node_modules的符号链接,指向外部node_modules文件夹
  3. 我检查项目package.json与外部位置之间的差异。如果它们不同,我会运行npm install并更新外部node_modulespackage.json
  4. 运行,构建......等等。不要忘记在构建或服务命令中添加--preserve-symlinks选项
  5. 使用此设置,我现在的构建时间为47秒,而之前的de 3+分钟。