我正在将 Gitlab CI/CD 用于 Java/Maven 项目,但对显示多个阶段的许多示例感到困惑,其中每个阶段都调用特定的 Maven 阶段(例如清理、编译、测试、安装)
Maven 文档非常清楚,每个阶段都隐式调用所有先前的阶段。所以我的问题是,为什么这些示例不只是调用阶段中列出的最后一个阶段?例如,如果 yml 中最后一个非手动调用的阶段执行“mvn install”,为什么不让它成为 yml 中的唯一阶段?这似乎只是浪费 CPU 和时间,因为安装还将调用“清理、编译、测试”,这些都已作为管道中前几个阶段的一部分被调用。
答案 0 :(得分:1)
建议您先调用 mvn compile
然后调用 mvn test
等的“教程”尚未理解 Maven 生命周期。
只需调用一个命令,例如用于安装的 mvn install
或 mvn deploy
如果您想在 Maven 的帮助下将其部署到某个 Maven 存储库。
答案 1 :(得分:0)
在不同阶段运行不同 Maven 目标的主要原因是清晰度。
如果测试失败并且管道有一个运行 mvn deploy
的作业,您需要查看管道失败原因的日志。
但是,如果在执行 mvn test
的地方存在单独的作业,您一眼就能看出管道因测试而失败。
在 gitlab 文档的示例中,他们使用缓存来缓存 mvn compile
的输出,因此后续步骤中的 Maven 目标不会从头开始编译,而是使用缓存。