Den*_*met 5 makefile gitlab-ci gitlab-ci-runner
我在我的 Gitlab CI 构建阶段使用这个脚本(只显示相关部分):
cache:
key: "$CI_BUILD_REF"
paths:
- bin/
- build/
build:
image: <my_build_image>
stage: build
script:
- "make PLATFORM='x86_64-linux-gnu' BUILD='release' JOBS=8 all"
only:
- master
- tags
- merge-requests
artifacts:
untracked: true
paths:
- bin/x86_64-linux-gnu/release
Run Code Online (Sandbox Code Playgroud)
我想,如果我将添加bin和build迪尔斯到缓存中,make每次都不会重建整个项目(就像它在当地的行为),但似乎什么CI亚军重写我的srcDIR每一次,所以时间戳的文件正在也更新了,并make认为每个文件都更新了。我想将srcdir 包含在缓存中,但它包含在 repo 中,我不确定这是否正确。那么,使用以前构建的二进制文件重建 gitlab ci 项目的最佳方法是什么?
小智 1
我看到您正在使用 $CI_BUILD_REF 作为缓存键;尽管此变量已被弃用,但它似乎可以工作并提供提交的 SHA1。这真的是您想要的吗,为每个提交创建单独的缓存(甚至不是每个分支)?那么对于任何新的提交,无论如何都不会有缓存?
我什至可能会使用静态缓存键来最大化缓存(同时使用最小的缓存存储),或者可能每个分支。
也许 Git 签出和/或分支开关太频繁地接触源文件。我在我的一个项目中实施了类似的策略,但在那里我有一个独特的“缓存”文件夹,用于/rsync/结账时的文件。
Gitlab.com 的共享运行程序在使用缓存时似乎确实保持了文件修改时间不变,甚至在主结帐时也是如此。
我已经建立了一个带有 CI 作业的示例项目,演示了https://gitlab.com/hannibal218bc/test-build-cache-xtimes/-/jobs/1022404894的事实:
stats 目录的内容cached目录(如果尚不存在)README.md文件README.built文件。正如您在输出中看到的,修改时间戳是README.built上一个作业的运行时间:
$ cd cached
$ stat README.* || true
File: README.built
Size: 146 Blocks: 16 IO Block: 4096 regular file
Device: 809h/2057d Inode: 2101510 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-02-10 23:06:13.000000000 +0000
Modify: 2021-02-10 23:02:39.000000000 +0000 <<< timestamp from previous job
Change: 2021-02-10 23:06:13.000000000 +0000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |