我正在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
[我以为如果将bin
和build
dirs添加到缓存中,make
不会每次都重新构建整个项目(就像它在本地一样),但是CI运行程序似乎覆盖了我每次src
目录,因此文件上的时间戳也将被更新,make
认为每个文件都已更新。我曾考虑过将src
dir包含到缓存中,但是它包含在回购中,我不确定这是正确的。那么,哪种方法是使用先前构建的二进制文件重建gitlab ci项目的最佳方法?
由于我尚无法评论...作为“答案”。
我正面临着完全相同的问题。 (导致大量的流水线时间和审阅者的沮丧...)
我的权衡取舍在:
Fetching changes...
Reinitialized existing Git repository in ... <====
Checking out deadbeef as my-branch...
Removing build/untracked-dir0/
Removing untracked-dir1/
Removing lib/archive/untracked-dir2/
Checking cache for my-branch-cache... <====
No URL provided, cache will not be downloaded from shared cache server. Instead a local version of cache will be extracted.
[我已经尝试或将来要研究的内容:
rules:changes
,因此如果仅触摸文档文件,请勿触发构建作业。rules:changes
似乎显示了很好的“触摸日期”,因此可以是评估这些“更新日期”的更手动的解决方案,并且只有在触摸了相关文件的情况下才调用git log -1 --pretty="format:%ci"
。make
构建),您不会接触,但仍从源代码构建(例如,具有ASan或其他编译器选项),并且将它们(包括源文件)添加到缓存中。您是否找到其他解决方案(您的问题已经2岁了?