Makefile 是否可以在Gitlab CI中仅重建更新的文件?
我将此脚本用于Gitlab CI构建阶段(仅显示相关部分):Makefile 是否可以在Gitlab CI中仅重建更新的文件?,makefile,gitlab-ci,gitlab-ci-runner,Makefile,Gitlab Ci,Gitlab Ci Runner,我将此脚本用于Gitlab CI构建阶段(仅显示相关部分): 缓存: 关键字:$CI\u BUILD\u REF 路径: -垃圾箱/ -建造/ 建造: 图片: 阶段:建造 脚本: -“使PLATFORM='x86_64-linux-gnu'BUILD='release'作业=8全部” 仅: -主人 -标签 -合并请求 人工产品: 未追踪:正确 路径: -bin/x86_64-linux-gnu/release 我想如果我将bin和builddir添加到缓存中,make不会每次都重建整个项目(就
缓存:
关键字:$CI\u BUILD\u REF
路径:
-垃圾箱/
-建造/
建造:
图片:
阶段:建造
脚本:
-“使PLATFORM='x86_64-linux-gnu'BUILD='release'作业=8全部”
仅:
-主人
-标签
-合并请求
人工产品:
未追踪:正确
路径:
-bin/x86_64-linux-gnu/release
我想如果我将
bin
和build
dir添加到缓存中,make
不会每次都重建整个项目(就像它在本地的行为一样),但似乎每次CI runner都会覆盖我的src
dir,因此,文件上的时间戳也在更新中,make
认为每个文件都在更新。我曾考虑将src
dir包含到缓存中,但它包含在repo中,我不确定这是否正确。那么,使用以前构建的二进制文件重建gitlab ci项目的最佳方法是什么?我看到您使用$ci\u BUILD\u REF作为缓存键;尽管此变量已被弃用,但它似乎可以工作并提供提交的SHA1。
这真的是您想要的吗?每个提交创建单独的缓存(甚至不是每个分支)?
所以对于任何新的提交,无论如何都不会有缓存
我甚至可能会使用静态缓存键来最大化缓存(同时使用最小的缓存存储),或者可能是每个分支
也可能Git签出和/或分支开关过于频繁地接触源文件。
我在我的一个项目中实现了类似的策略,但是在那里我有一个不同的“缓存”文件夹,在那里我/rsync/从签出中删除文件
Gitlab.com的共享运行程序在使用缓存时,甚至在主签出时,似乎都保持了文件修改时间不变
我提出了一个带有CI作业的示例项目,该项目演示了fac tat:
- 作业
s目录的内容stat
- 创建一个
目录(如果它还不存在)缓存的
- 复制
文件README.md
- 将文件“编译”为
文件README.build
README.builded
的修改时间戳是前一个作业的运行时:
$ 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
$cd缓存
$stat自述。*| |正确
文件:README.build
大小:146块:16 IO块:4096常规文件
设备:809h/2057d索引节点:2101510链接:1
访问:(0644/-rw-r--r--)Uid:(0/根)Gid:(0/根)
访问:2021-02-10 23:06:13.000000000+0000
修改:2021-02-10 23:02:39.000000000+0000
$ 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