首页 > 解决方案 > 我可以在 Jenkins CI 上加快 Gradle 守护进程的启动速度吗?

问题描述

每次我将我的 gradle 构建推送到 Jenkins 时,它都会在这一步上花费大量时间:

Starting a Gradle Daemon (subsequent builds will be faster)

我的 Jenkinsfile 的相关部分如下所示:

stage('Build') {
  steps {
    withGradle() {
      sh 'chmod +x gradlew'
      sh './gradlew build jar'
    }
  }
}

我假设 withGradle() 会尝试在 Jenkins 的后台持续运行一个 gradle 守护程序以避免这种事情,但在这一点上,我并不完全确定它会做什么——它的文档非常模糊。

如何使用此系统缩短构建时间?

标签: jenkinsgradlejenkins-pipeline

解决方案


withGradle由 Jenkins 的Gradle 插件贡献,并贡献了控制台输出突出显示和构建扫描 URL 捕获(在 Jenkins UI 中显示构建扫描 URL)。它当然不会对 Gradle 守护进程做任何事情。您不需要withGradle在 Jenkins 中运行 Gradle 构建,当然这取决于您是否使用构建扫描。只做

stage('Build') {
  steps {
    sh 'chmod +x gradlew'
    sh './gradlew build jar'
  }
}

很好。

Gradle 守护程序在闲置 3 小时后自行停止(常见问题解答)。如果构建每天只运行一次,那么守护进程肯定会死掉。这通常是守护程序不存在并需要启动的原因。

如果正在运行的守护进程被分类为不兼容(构建环境,例如堆内存设置,已更改),Gradle 也可能决定启动一个新的守护进程实例。根据我的信息,这在构建输出中明确突出显示。

关于缓慢的守护进程启动性能,通常建议在最新的 Gradle 和 Java 版本上运行构建。

最后一个提示。sh 'chmod +x gradlew'如果您使用 Git 作为版本控制系统,您可以通过让 Git 通过update-index设置可执行标志来摆脱:

git update-index --chmod=+x gradlew

推荐阅读