【问题标题】:Mixing GitLab CI and make - how?混合 GitLab CI 和 make - 如何?
【发布时间】:2020-02-18 10:16:06
【问题描述】:

我的任务是将基于 gnu-make 的构建系统移动到 GitLab CI 并遇到了一个问题 - 是否有一个很好的模式来说明它应该如何工作?

问题是我创建了一个多阶段、多作业管道,并小心地将输出从作业 X 传递到作业 Y(例如)作为 GitLab CI artefactsdependencies。然而,我继承的 Makefiles 对曾经构建的所有事物都有完全深入的知识,因此他们查看从 Job X 继承的 artefacts,尝试决定是否需要重建它们并最终重建了 Job X 构建的所有内容,因为 gnu-make 看不到 Job X 在 Job Y 的上下文中使用的中间构建输出。所以基本上所有东西都被构建了很多很多次,GitLab CI artefacts 几乎没用。

这感觉就像人们以前一定遇到过的东西,但我正在努力寻找任何指导。谁能指出一些很好的资源来解释解决这个问题的最佳模式?

谢谢!

【问题讨论】:

  • 没有答案,但现在我正在通过将整个输出复制到工件中并从每个阶段构建越来越大的工件集来解决问题。一点也不漂亮:-(。

标签: gnu-make gitlab-ci


【解决方案1】:

第一次回复堆栈溢出 - 如果我没有得到应有的一切,非常抱歉......

一个可能对您有用的选项是在您在作业 Y 中运行 make 命令之前运行 make -t。然后,Make 将为所有丢失的中间文件创建空版本,并至关重要地将时间戳设置为与顶部相同-水平目标。这将阻止任何重建。见https://www.gnu.org/software/make/manual/html_node/Avoiding-Compilation.html

您仍然可能遇到的一个问题是make -t 不会创建丢失的目录(在 make 下只是调用 touch)。如果您需要这样做,那么我建议您编写一个规则/单独的脚本来创建所有丢失的目录和文件并设置它们的时间戳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2021-12-24
    • 2018-06-02
    • 1970-01-01
    • 2016-07-28
    • 2019-10-31
    相关资源
    最近更新 更多