manbetx客户端打不开:在/ tmpfs中将构建文件挂载/构建

时间:2018-10-31 12:40:16

标签: docker gitlab gitlab-ci gitlab-ci-runner tmpfs

在我们的GitLab CI环境中,我们有一台具有大量RAM但机械磁盘的构建服务器,运行npm install需要很长时间(我已经添加了缓存,但是它仍然需要仔细检查现有软件包,因此缓存无法单独解决所有这些问题。 )。

我想将/ builds作为tmpfs挂载在构建器docker映像中,但是我很难确定将此配置放在何处。我可以在生成器映像本身中执行此操作,还是可以在每个项目的.gitlab-ci.yml中执行此操作?

目前,我的gitlab-ci.yml看起来像这样:

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

cache:
  key: node_modules-${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/

stages:
  - test

test:
  image: docker-builder-javascript
  stage: test
  before_script:
    - npm install
  script:
    - npm test

2 个答案:

答案 0 :(得分:1)

您可能想要这样的内容在运行器上添加数据量:

volumes = ["/path/to/volume/in/container"]

https://docs.gitlab.com/runner/configuration/advanced-configuration.html#example-1-adding-a-data-volume

不过,我可能会使用本文的第二个选项,并从主机容器添加数据量,以防您的缓存由于某种原因而损坏,因为它更易于清理。

volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]

我之前已经为作曲家缓存做到了这一点,并且效果很好。 您应该可以在.gitlab-ci.yaml中使用以下环境变量为npm设置缓存:

npm_config_cache=/path/to/cache

另一种选择是在构建之间使用构件,如此处概述:How do I mount a volume in a docker container in .gitlab-ci.yml?

答案 1 :(得分:0)

我发现可以通过直接使用before_script部分中的mount命令来解决此问题,尽管这需要您在我设法减少很多测试时间的情况下复制源代码。

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

stages:
  - test

test:
  image: docker-builder-javascript
  stage: test

  before_script:
    # Mount RAM filesystem to speed up build
    - mkdir /rambuild
    - mount -t tmpfs -o size=1G tmpfs /rambuild
    - rsync -r --filter=":- .gitignore" . /rambuild
    - cd /rambuild

    # Print Node.js npm versions
    - node --version
    - npm --version

    # Install dependencies
    - npm ci

  script:
    - npm test

由于我现在使用的是npm ci而不是npm install命令,因此我不再使用缓存了,因为无论如何每次运行都会清除缓存。