忽略gitlab-runner kubernetes缓存

时间:2018-02-07 18:13:40

标签: caching kubernetes gitlab gitlab-ci gitlab-ci-runner

我有一个带有gitlab-runner 10.3.0和kubernetes执行器的kubernetes集群。在runner的config.toml文件中没有定义cache_dir。请注意,这与docker执行程序不同,因此volume-solutions不适用。

.gitlab-ci.yml中,我将作业配置为使用缓存:

build:
  cache:
    key: "${PROJECT_NAME}"
    paths:
      - "node_modules/"
  script:
    - ls node_modules/ || echo "cache not there"
    - npm i
    - npm build
    - ...

当我运行它时,我看到缓存被拉出并创建:

Cloning repository for some-branch with git depth set to 1...
Cloning into '/group/projectname'...
Checking out d03baa31 as some-branch...
Skipping Git submodules setup
Checking cache for projectname...
Successfully extracted cache
$ docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
//
// ...work being done here... 
//
Creating cache projectname...
node_modules/: found 24278 matching files
Created cache
Job succeeded

但是,当我将另一个提交推送到此分支时,ls node_modules/仍然找不到缓存。

我搜索了文档,但没有找到有关如何激活缓存的任何信息。 gitlab-runner-pod也没有任何所谓的缓存文件和according to the documentation,配置中的cache_dir不被kubernetes执行者使用。

但根据this feature page,kubernetes执行者 支持缓存。

那怎么办呢?

1 个答案:

答案 0 :(得分:4)

由于Kubernetes的分布式特性,您需要配置中央缓存位置(通常以与AWS S3Minio等S3兼容的对象存储的形式)。这背后的原因在Gitlab runner documentation(强调我的)中解释:

  

为了加快构建速度,GitLab Runner提供了一种缓存机制,用于保存选定的目录和/或文件,并在后续版本之间共享。

     

当构建在同一主机上运行时,这很正常,但是当您开始使用Runners自动缩放功能时,大多数构建将在新的(或几乎是新的)主机上运行,​​该主机将执行每个构建一个新的Docker容器。在这种情况下,您将无法利用缓存功能。

     

为了解决此问题,与自动缩放功能一起引入了分布式Runners缓存功能。

     

它使用任何与S3兼容的服务器来共享使用过的Docker主机之间的缓存。在恢复和存档缓存时,GitLab Runner将查询S3服务器并下载或上传存档。

为此,您可以在跑步者配置中使用[runners.cache] section

[runners.cache]
  Type = "s3"
  ServerAddress = "s3.amazonaws.com"
  AccessKey = "AMAZON_S3_ACCESS_KEY"
  SecretKey = "AMAZON_S3_SECRET_KEY"
  BucketName = "runners"
  BucketLocation = "eu-west-1"
  Insecure = false
  Path = "path/to/prefix"
  Shared = false

按OP编辑: Installation instructions for Minio for gitlab-ci