我有一个使用CMake构建的大型多语言项目。在这里有一个用Haskell编写的部分,它使用stack
来构建。 CI构建由Gitlab CI处理,并在 docker executor 中运行。在创建docker图像期间,使用stack setup
下载ghc。构建的Haskell部分仍然需要相当长的时间,因为它会为每个构建重新下载并构建所有必需的包。
要缓存我添加的本地数据库
cache:
paths:
- src/utils/.stack-work
(堆栈YAML文件位于src/utils/
,三个Haskell包也存在于dirs中。)
但这并没有真正加快构建速度。在仔细阅读stack databases后,我意识到快照已放入STACK_ROOT
(~/.stack
)。研究堆栈选项表明无法指定快照应与STACK_ROOT
分开存储。
鉴于Gitlab CI似乎只允许在构建目录中缓存项目,我认为我有两个选择:
stack --stack-root <folder under build> ...
将STACK_ROOT
置于构建目录中,然后缓存整个内容。这意味着我的缓存从不到100M变为大约1.6G!现在提出我的问题:
STACK_ROOT
?stack setup
抓取ghc的方式?或许我完全错了,并且有更好的途径来限制缓存大小。
答案 0 :(得分:1)
在@dsign的评论和一点思考后,我找到了一个令人满意的解决方案:
stack install --only-dependencies
。