本地Gitlab运行器不会还原缓存,但共享运行器会还原

时间:2019-03-26 12:38:28

标签: docker gitlab gitlab-ci-runner docker-for-windows

我正在尝试编译和测试C ++项目,并使用ccache加快构建时间。

我的.gitlab-ci.yml允许使用Gitlab共享运行程序进行缓存,但是当我与运行程序运行相同的管道时,作业报告创建了缓存并在随后的运行中成功提取了缓存,但是没有文件添加到缓存中。缓存路径。

build:
  stage: build
  cache:
    key: "$CI_COMMIT_REF_SLUG"
    paths:
      - ccache/
  artifacts:
    paths:
      - build/app/wg-ui
      - build/lib/libproject-lib.so*
      - build/tests/tests
  script:
    - echo "Starting build"
    - ls
    - ls ccache
    - mkdir -p build && cd build
    - qmake ../
    - make -j$(nproc) -Oline CXX="ccache ${CXX}"

这是我的config.toml的跑步者部分

[[runners]]
  name = "Laptop-Runner"
  url = "https://gitlab.com/"
  token = "{REDACTED}"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    cache_dir = ""
    shm_size = 0
    pull_policy = "if-not-present"
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

我错过了配置步骤吗?我需要对config.toml做任何事情吗?

更新

我没有使用以前使用的Docker for Windows,而是决定设置一个VM并从那里运行Docker和Gitlab-Runner。

使用完全相同的.gitlab-ci.ymlconfig.toml缓存可以按预期完美地工作;因此,我假设问题出在我的Docker配置或Gitlab Runner的Windows实施中。

1 个答案:

答案 0 :(得分:0)

除Docker缓存外,您的运行器上没有配置任何缓存,因为您的[runners.cache]部分为空。

来自https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section

  

Docker执行器具有2种缓存级别:全局缓存(与任何其他执行器一样)和基于Docker卷的本地缓存。此配置标志仅作用于本地的标志,该标志禁止使用自动创建(未映射到主机目录)的缓存卷。换句话说,它仅阻止创建一个容器来容纳构建的临时文件,如果将Runner配置为分布式缓存模式,则不会禁用缓存。

有关分布式缓存模式,请参考https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching