使用 Gradle 的 Jenkins 作业找不到可执行文件

Jenkins job using Gradle can't find executable

我正在尝试设置 Jenkins 作业来构建下一个大型 Android 应用程序!我已经安装了 Android SDK,那部分似乎工作正常。我已经在 J​​enkins 上安装了 Gradle 插件 v1.24,现在我想我正在尝试弄清楚如何让 Gradle 实际工作。

第一次尝试是让 Jenkins 从 gradle.org 自动下载特定版本。我正在尝试提取 v2.2.1,因为这似乎是我的 Android 应用程序在本地构建的版本。当我这样做时,我在 Jenkins 工作中遇到了这个错误:

[Gradle] - Launching build.
Invalid tool ID 2.2.1
[Gradle] - [ERROR] Can't retrieve the Gradle executable.
Build step 'Invoke Gradle script' marked build as failure

我尝试了很多不同的版本,但无法正常工作。所以,接下来是告诉 Jenkins 从哪里下载 Gradle。我给它这个位置:

https://services.gradle.org/distributions/gradle-2.2.1-bin.zip

我在构建时遇到了不同的错误,但仍然不太确定该怎么做。

[Gradle] - Launching build.
[Journeyman-Android] $ gradle clean build
FATAL: command execution failed
java.io.IOException: Cannot run program "gradle" (in directory "/var/lib/jenkins/workspace/Journeyman-Android"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at hudson.Proc$LocalProc.<init>(Proc.java:244)
at hudson.Proc$LocalProc.<init>(Proc.java:216)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:816)
at hudson.Launcher$ProcStarter.start(Launcher.java:382)
at hudson.Launcher$ProcStarter.join(Launcher.java:389)
at hudson.plugins.gradle.Gradle.performTask(Gradle.java:262)
at hudson.plugins.gradle.Gradle.perform(Gradle.java:116)
at hudson.tasks.BuildStepMonitor.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779)
at hudson.model.Build$BuildExecution.build(Build.java:205)
at hudson.model.Build$BuildExecution.doRun(Build.java:162)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537)
at hudson.model.Run.execute(Run.java:1744)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:374)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 16 more
Build step 'Invoke Gradle script' changed build result to FAILURE

我试图看看我可以用 Jenkins CLI 做什么,但对我来说也失败了。我们使用 Jenkins 成功地 build/deploy 其他几个项目,所以这是一个有效的 Jenkins 安装。

有没有人对我可能需要做的事情有任何指示或建议?

更新(仍然失败)

我能够手动构建我的应用程序,但在 jenkins 工作区中导航到我项目的根目录并执行

./gradlew assemble

终于想通了。我需要更新我的 jenkins 作业以使用 Gradle wrapper 而不是特定的 Gradle 版本。一旦我这样做了,我还有一些错误需要筛选,但它们都非常有用,并为我提供了解决它们所需的信息。

我下载了Gradle。 提取到某个地方。

在 Jenins > 管理 Jenkins > Gradle

取消选中自动安装。

将路径设置为 gradle 主页,(例如:C:\Graddle\gradle-2.1)。

问题已解决。

对于 linux 上的 Jenkins 运行:

  1. 下载gradle 压缩文件

    cd /opt/

    wget https://services.gradle.org/distributions/gradle-2.10-all.zip

  2. 解压缩

    解压gradle-2.10-all.zip

  3. 访问詹金斯网站

    Jenkins > 管理 Jenkins > 配置系统 > Gradle > Gradle 安装

    取消选中自动安装,将 2.10 设置为名称,将 /opt/gradle-2.10 设置为 GRADLE_HOME。

  4. 点击您的职位

    配置 > 构建 > 调用 Gradle 脚本

    select 在 Gradle 版本下拉列表中调用 Gradle、select 2.10。

如果之前使用 Invoke Gradle script 选项配置了构建并选择了特定的 Gradle Version(例如 2.4),他启动了构建但后来切换到 Use Gradle Wrapper 选项而没有重置Gradle Version 值变回 Default。詹金斯会发出

[Gradle] - [ERROR] Can't retrieve the Gradle executable.

这是一个 jenkins 的错误,如此 post

解决方法是在切换到 Use Gradle Wrapper 之前将 Gradle Version 重置为 Default

这将帮助您解决无效工具问题:

管理 Jenkins -> 管理插件 -> 高级:点击页面 bottom/right 处的 "Check Now" 按钮。

在旧版本的 Jenkins (v1.609) 上,我不得不删除 "Gradle build script" 步骤,然后重新创建它 :-O