Makefile 是否可以在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不会每次都重建整个项目(就

我将此脚本用于Gitlab CI构建阶段(仅显示相关部分):

缓存:
关键字:$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:

  • 作业
    stat
    s目录的内容
  • 创建一个
    缓存的
    目录(如果它还不存在)
  • 复制
    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