作者:DLDLBABY1_182 | 来源:互联网 | 2022-12-29 08:59
我有一个gitlab-runner 10.3.0和kubernetes执行器的kubernetes集群。cache_dir
在跑步者的config.toml文件中没有定义。请注意,这与docker executor不同,因此卷解决方案不适用。
在中.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那里也没有任何所谓的缓存文件,并且根据文档,cache_dir
kubernetes执行程序未使用config中的a。
但是根据此功能页面,kubernetes执行器确实支持缓存。
那么该怎么做呢?
1> helmbert..:
由于Kubernetes的分布式特性,您将需要配置中央缓存位置(通常以与S3兼容的对象存储的形式(例如AWS S3或Minio)的形式)。Gitlab运行程序文档(重点是我的)中对此原因进行了解释:
为了加快构建速度,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编辑: Minio for gitlab-ci的安装说明
仅谈论S3会产生误导-不了解与S3兼容的存储桶Minio。谢谢!请参阅:https://docs.gitlab.com/runner/install/autoscaling.html#install-the-cache-server