gpt4 book ai didi

haskell - 在 Gitlab CI 中的构建之间缓存堆栈数据库

转载 作者:行者123 更新时间:2023-12-02 10:29:59 25 4
gpt4 key购买 nike

我有一个使用 CMake 构建的大型多语言项目。其中有一部分是用 Haskell 编写的,它使用 stack build 。 CI 构建由 Gitlab CI 处理并在 Docker 执行器中运行。在创建 docker 镜像期间,使用 stack setup 下载 ghc 。不过,构建的 Haskell 部分仍然需要相当长的时间,因为它会为每个构建重新下载并构建所有必需的包。

缓存我添加的本地数据库

cache:
paths:
- src/utils/.stack-work

(堆栈 YAML 文件位于 src/utils/ 中,三个 Haskell 包也位于那里的目录中。)

但这并没有真正加快构建速度。仔细阅读 stack databases 后我意识到快照被放入 STACK_ROOT (~/.stack)。研究堆栈的选项表明,没有办法指定快照应与 STACK_ROOT 分开存储。 .

鉴于 Gitlab CI 似乎只允许在构建目录中缓存项目,我认为我只剩下两个选择:

  • 使用stack --stack-root <folder under build> ...放置 STACK_ROOT在构建目录中,然后缓存整个内容。这意味着我的缓存从不到 100M 增加到大约 1.6G!
  • 将当前的快照预取到我们用于构建的 Docker 镜像中。

现在回答我的问题:

  • 我认为快照始终存储在 STACK_ROOT 中是否正确? ?
  • 有没有办法预取特定快照,类似于 stack setup获取 ghc?

或者也许我完全错了,有更好的方法来限制缓存大小。

最佳答案

经过 @dsign 的评论和一番思考后,我找到了一个令人满意的解决方案:

  • 是的,在 Docker 镜像构建期间通过(某种程度上)构建软件来预取是可以的。
  • 预取的方法是运行stack install --only-dependencies

关于haskell - 在 Gitlab CI 中的构建之间缓存堆栈数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com