gpt4 book ai didi

gitlab 8.2.1, 如何在 .gitlab-ci.yml 中使用缓存

转载 作者:行者123 更新时间:2023-12-03 10:15:02 25 4
gpt4 key购买 nike

我正在尝试在 .gitlab-ci.yml ( http://doc.gitlab.com/ce/ci/yaml/README.html#cache ) 中使用“缓存”。我的 gitlab 版本是 8.2.1,我的 Runner 是:

$ docker exec -it gitlab-runner gitlab-runner -v 
gitlab-runner version 0.7.2 (998cf5d)

所以根据文档,一切都是最新的,但我无法使用缓存;-(。我所有的文件总是被删除。我做错了什么吗?

缓存存档已创建,但不会传递给下一个作业。

这是我的 .gitlab-ci.yml
$ cat .gitlab-ci.yml
stages:
- createcache
- testcache

createcache:
type: createcache
cache:
untracked: true
paths:
- doc/
script:
- touch doc/cache.txt

testcache:
type: testcache
cache:
untracked: true
paths:
- doc/
script:
- find .
- ls doc/cache.txt

作业“createcache”的输出
Running on runner-141d90d4-project-2-concurrent-0 via 849d416b5994...
Fetching changes...
HEAD is now at 2ffbadb MUST BE REVERTED
[...]
$ touch doc/cache.txt
[...]
Archiving cache...
INFO[0000] Creating archive cache.tgz ...
INFO[0000] Done!

Build succeeded.

作业“testcache”的输出
Running on runner-141d90d4-project-2-concurrent-0 via 849d416b5994...
Fetching changes...
Removing doc/cache.txt
[...]
$ ls doc/cache.txt
ls: cannot access doc/cache.txt: No such file or directory

ERROR: Build failed with: exit code 1

我的解决方法

我的解决方法是手动解压缩/cache 目录中的内容......我很确定这不是使用缓存的正确方法......
$ cat .gitlab-ci.yml
stages:
- build
- test
- deploy

image: ubuntu:latest

before_script:
- export CACHE_FILE=`echo ${CI_PROJECT_DIR}/createcache/${CI_BUILD_REF_NAME}/cache.tgz | sed -e "s|/builds|/cache|"`

createcache:
type: build
cache:
untracked: true
paths:
- doc/
script:
- find . | grep -v ".git"
- mkdir -p doc
- touch doc/cache.txt

testcache:
type: test
script:
- env
- find . | grep -v ".git"
- tar xvzf ${CACHE_FILE}
- ls doc/cache.txt

最佳答案

8.2 仅支持 per-job 缓存,8.3 将根据 @ayufan's comment in Possibility to cache folders in build directory (#97) 引入在作业之间服务的“组”缓存。 .

但是,虽然我不能 100% 确定,但通过快速挖掘 gitlab-ci-muti-runner 的源代码,docker executor 似乎无法使用缓存功能。由于在每个作业中都会创建和销毁一个全新的容器,因此下一次构建中将不再存在 cache.tgz 存档。

勘误表:

由于在错误配置的环境中进行测试,上述描述是不正确的。默认情况下,gitlab-ci-multi-runner 创建一个专用的数据卷容器作为每个并发构建的缓存存储。缓存容器挂载到目录/cache在应用程序容器中,那些 cache.tgz tarball 放在 /cache 下默认情况下。所以缓存实际上可以在独立构建中重用。

2015/12/11 更新:

刚刚发现gitlab-runner@7dc9524f6ef0144b3797fc07c9035f38a8ad0512中已经实现了“组”缓存,可能尚未发布和记录。你可以启用它

cache:
paths:
- doc/
group: sharedcache

结果是一个缓存 tarball 被放置在路径 <namespace>/<repo>/sharedcache/ 下。而不是将两个缓存 tarball 分别放置在路径 <namespace>/<repo>/createcache/ 下和 <namespace>/<repo>/testcache/ .

2017/12/04 更新:

“组”缓存已被替换为 cache:key .使用 key在作业或 git 引用之间进行缓存共享的键。默认情况下,缓存在所有作业之间共享。因此,只需编写以下内容即可完成工作
cache:
paths:
- doc/

结帐 GitLab CI cache:keygitlab-runner@d34f76f86a7c2fc4d399e9922175bcc614434016想要查询更多的信息。

关于gitlab 8.2.1, 如何在 .gitlab-ci.yml 中使用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com