2011-12-27 220 views
49

我已经为Jenkins安装了Gradle插件。当我尝试建立项目我得到以下错误:无法在Jenkins中运行程序“gradle”

[workspace] $ gradle clean -b build/build.gradle 
FATAL: command execution failed 
java.io.IOException: Cannot run program "gradle" (in directory "/Users/Shared/Jenkins/Home/jobs/test/workspace"): error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at hudson.Proc$LocalProc.<init>(Proc.java:244) 
    at hudson.Proc$LocalProc.<init>(Proc.java:216) 
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:707) 
    at hudson.Launcher$ProcStarter.start(Launcher.java:338) 
    at hudson.Launcher$ProcStarter.join(Launcher.java:345) 
    at hudson.plugins.gradle.Gradle.performTask(Gradle.java:201) 
    at hudson.plugins.gradle.Gradle.perform(Gradle.java:97) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19) 
    at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:695) 
    at hudson.model.Build$RunnerImpl.build(Build.java:178) 
    at hudson.model.Build$RunnerImpl.doRun(Build.java:139) 
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:465) 
    at hudson.model.Run.run(Run.java:1404) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:238) 
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:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 
    ... 16 more 
Build step 'Invoke Gradle script' changed build result to FAILURE 
Build step 'Invoke Gradle script' marked build as failure 
Finished: FAILURE 

运行命令行任务$ gradle clean -b build/build.gradle按预期工作。

+0

你肯定Jenkins有正确的gradle路径吗?我没有可用的构建机器,但我认为您必须为gradle插件配置gradle home路径。 – thoredge 2011-12-27 20:34:10

+0

它与我的.profile – 2011-12-27 20:41:23

+0

相同的路径“没有这样的文件或目录”很清楚。 Jenkins找不到'gradle'可执行文件。可能它不在运行Jenkins作业的OS用户的路径上。无论如何,我建议在CI机器上使用Gradle Wrapper。 – 2011-12-28 03:57:04

回答

57

我有同样的问题,发现我的问题是项目配置中的gradle版本。它被设置为默认,当我将它设置为gradle版本时,我指向插件配置中的管理Jenkins>配置选项,它发现gradle并正常工作。

这是一个难以调试的问题,我希望这可以节省别人一些时间。

+0

是的,我的测试是这样的,下拉框选择Gradle版本是隐藏的,我不得不明确选择Gradle版本单选按钮来显示,我认为这是一个错误。一旦选择了Gradle版本(默认除外),它工作正常。谢谢。 – 2014-02-04 01:37:38

+0

这工作就像一个魅力!没有进一步看! – geoand 2014-11-21 10:48:28

+2

你如何明确地输入或选择实际的gradle版本?它不允许我选择除默认外的其他任何东西 – jonney 2015-03-23 11:17:23

1

詹金斯无法找到gradle可执行文件。我从来没有使gradle包装工作。请按照下列步骤操作:

  • 下载gradle这个(http://gradle.org/downloads
  • 解开它,例如,在/ usr/local/lib目录/ gradle这个,
  • 打开/ etc/profile文件并添加以下两行:
  • 出口GRADLE_HOME =在/ usr/local/lib目录/ gradle这个
  • 出口PATH = $ PATH:$ GRADLE_HOME/bin中

它适用于my jenkins installation

ps。我回答了这个老问题,因为在与詹金斯合作设置gradle时这是一个常见问题。我花了一些时间试图让gradle包装器在没有成功的情况下工作。

+0

我已经在bash_profile下设置了gradle_home,对我来说仍然是它的同一个问题 – 2017-02-17 09:08:39

0

正如其他人所指出的,这是因为詹金斯无法找到gradle可执行文件。

没有任何已发布的解决方案适用于我,但我可以通过将gradle bin目录添加到构建从属服务器上构建帐户的.bashrc中设置的路径来解决此问题。修改.profile失败,并在jenkins节点配置中设置PATH也失败。有些帖子会建议在工具菜单中设置gradle路径,但是在那里也没有可用的gradle条目(可能是由于Gradle插件中的回归/设计更改?)。

在任何情况下,最好的测试,我发现(短再次运行的版本,看失败的)是运行env通过ssh:

ssh <host> env 

,并检查定义方式PATH变量;如果gradle不在该路径中,那么您可能无法从jenkins运行它。

20

解决方案Mastering_the_Object指出工作形成我太多,我只想澄清步骤有:
在詹金斯刚刚安装摇篮插件是不够的,还必须去:
Jenkins->管理Jenkins->配置詹金斯 - >配置系统。
在名称中显示“Gradle Installations”(在项目配置中显示为版本),选中“自动安装”并选择版本。然后,您可以在项目配置中选择该“Gradle版本”。

+0

+1指出如何找到组态。已经看到许多建议来改变设置,但没有人说在哪里可以找到它。 – Lmickos 2014-08-19 10:52:55

+0

@ pad这也帮助了我。谢谢。 – DMA 2016-02-26 13:32:22

1

同时使用@Skarab &这里有很多其他的解决方案来实现它。

下载gradle这个(http://gradle.org/downloads), 解开它,例如,在/ usr/local/lib目录/ gradle这个, 打开/ etc/profile文件并添加以下两行: 出口GRADLE_HOME =在/ usr/local/lib目录/ gradle这个 出口PATH = $ PATH:$ GRADLE_HOME/bin中

然后在管理詹金斯>配置系统>摇篮,定义GRADLE_HOME并给该gradle这个安装的名称

然后,{这可能是一个错误}为项目,将Gradle版本从Default更改为我上面定义的版本

11

在Jenkins等CI机器上运行Gradle时,使用Gradle Wrapper最为方便。

在开发计算机上,站在你的项目根目录,然后运行

gradle wrapper 

然后,检查在生成的文件到您的源代码控制系统。之后,如果您需要更改Gradle版本,则不必在Jenkins服务器上安装任何内容。只须配置您詹金斯的工作是这样的:

enter image description here

Gradle User Guide报价:

By distributing the wrapper with your project, anyone can work with it without needing to install Gradle beforehand. Even better, users of the build are guaranteed to use the version of Gradle that the build was designed to work with. Of course, this is also great for continuous integration servers (i.e. servers that regularly build your project) as it requires no configuration on the server.

+0

这对于几乎任何企业都不是合理的建议。我们相信我们的人工制品的来源是很重要的,因此大多数企业都使用内部存储库。 GradleW只能访问互联网。我并不是说在其他环境中这不合理,我只是指出它可能不适用于企业。 – 2015-04-02 08:53:55

+3

并非如此。包装器对您提供的任何URL都很满意,所以它不需要Internet访问。我们在Artifactory服务器中有任何本地缓存的Gradle副本(任何HTTP服务器都可以)。 'gradle-wrapper.properties'需要指向内部URL而不是正式的repo。这也减轻了官方服务器的负担,并为我们的本地用户提供更好的构建速度。 第一次下载封装后,您不需要在PC上建立网络连接 - CI机器可以持续访问我们的本地存储库。 – Jolta 2015-04-03 14:12:27

+1

使用包装器确实是一个更好的解决方案,因为您不需要在jenkin的全局配置和项目配置中匹配版本所做的所有努力。简单得多! – iCrus 2016-07-14 19:38:18

6

我正在使用的摇篮包装这个错误,是能够解决我破碎的构建如下:

  1. 转至管理Jenkins - >全局工具配置 - > Gradle - >添加Gradle,gi已经成为一个名字
  2. 转到詹金斯 - >(你的工作) - >配置 - >构建,选择“调用摇篮”,改变从(默认)的摇篮版本命名版本