【问题标题】:Gradle build takes too long through jenkins通过 jenkins 构建 Gradle 花费的时间太长
【发布时间】:2023-03-17 03:21:01
【问题描述】:

通过带有 Gradle 插件的 Jenkins,我的 Java/Springboot 项目构建非常缓慢。当尝试手动结帐并尝试以下操作时:

gradle 构建

构建运行非常快!大约 3 分钟,否则大约需要 29 分钟。

我通过 Jenkins 执行的构建步骤实际上是相同的,

SVN 代码检查部分在这两种方法上都很快。只有构建部分很慢。可能是什么问题 ?

【问题讨论】:

  • 你应该能够得到 jenkins 日志来验证它当时在做什么

标签: java jenkins gradle build continuous-integration


【解决方案1】:

您可以将 --profile 参数添加到 gradle 命令行以向 build/reports/profile 写入报告。从中您将能够看到所有时间都花在了哪里。见profiling a build

【讨论】:

  • 这确实有帮助! :compileJava 8m59.97s :test 8m38.40s :compileTestJava 6m52.34s :startScripts 6m26.26s :distZip 3.820s 。看起来所有活动的时间都是平等的!
  • 也许源文件与 gradle 进程在不同的机器上,所以一切都发生在网络上(例如网络驱动器)?也许堆大小太小并且一直在进行 GC?
【解决方案2】:

我认为答案是工件的下载时间。

当您运行 2 个构建时,第二个运行得更快吗? 尝试从本地计算机中删除 .gradle 文件夹并构建。花了多少时间?

您是否在使用工件存储库 - artifactory / Nexus?

【讨论】:

  • 使用 JFrog 工件,工件下载只发生一次,缓存在以后的构建中(第一次额外 +15 分钟)每次构建几乎都需要相同的时间 ~ 29 分钟。
  • 你在使用时间戳插件吗?它将向您显示这次花费的任务。所以在 Jenkins 机器上第一次构建需要 45 分钟,第二次需要 29 分钟?而在你的机器上它只有 3 ?你运行的是同一个 gradle 版本吗?和同样的命令?你可以在 Jenkins slave 上手动运行构建来检查它的持续时间吗?
  • 不使用时间戳插件。在 Jenkins 中首次构建:45 分钟(预期的工件下载的额外时间)其余构建:29 分钟。在同一个构建服务器上,在同一个 jenkins 的工作空间上,使用相同的 gradle 版本,通过命令行 ~3 分钟。
  • 您使用的命令行是什么?构建中的命令是什么(检查日志)并添加时间戳插件以了解花费的时间
  • gradle 不需要时间戳插件。改为使用 -profile 标志。 :compileJava 8m59.97s :test 8m38.40s :compileTestJava 6m52.34s :startScripts 6m26.26s :distZip 3.820s
猜你喜欢
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多