2011-12-27 23 views
49

He instalado el complemento Gradle para Jenkins. Cuando intento para construir el proyecto me sale el siguiente error:No se puede ejecutar el programa "gradle" en Jenkins

[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 

ejecución de la tarea $ gradle clean -b build/build.gradle desde la línea de comandos funciona como se espera.

+0

¿Estás Seguro que Jenkins tiene el camino de gradle correcto? No tengo mi máquina de compilación disponible, pero creo que tienes que configurar una ruta de inicio de Gradle para el complemento de Gradle. – thoredge

+0

Es la misma ruta que en mi .profile –

+0

"No hay tal archivo o directorio" es bastante claro. Jenkins no puede encontrar el ejecutable 'gradle'. Probablemente no esté en la ruta del usuario del sistema operativo que ejecuta el trabajo de Jenkins. En cualquier caso, recomiendo usar Gradle Wrapper en una máquina CI. –

Respuesta

57

Tuve el mismo problema y encontré que el problema para mí era la versión de Gradle en la configuración del proyecto. Se estableció en Predeterminado y cuando lo configuré en la versión de Gradle que estaba señalando en la configuración del complemento en Administrar Jenkins>Opciones de configuración, encontró gradle y funcionó correctamente.

Este es un problema difícil de depurar y espero que esto le ahorre a alguien más algo de tiempo.

+0

Sí, probé que este es el caso, el cuadro desplegable para seleccionar la versión de Gradle estaba oculto, y tuve que seleccionar explícitamente el botón de opción de la versión Gradle para que se muestre, creo que esto es un error. Una vez seleccionada la versión de Gradle (que no sea la predeterminada), funcionó bien. Gracias. –

+0

¡Esto funcionó como un encanto! ¡No busqué más! – geoand

+2

¿Cómo se ingresa o selecciona explícitamente la versión gradle real? no me permite seleccionar nada más que el predeterminado – jonney

1

Los jenkins no pueden encontrar el ejecutable gradle. Nunca he hecho que gradle wrapper funcione. Por favor, siga los siguientes pasos:

  • Descargar Gradle (http://gradle.org/downloads),
  • desempaquételo en, por ejemplo,/usr/local/lib/Gradle,
  • /etc/perfil abierto y añadir las dos líneas siguientes :
  • GRADLE_HOME exportación =/usr/local/lib/Gradle
  • export PATH = $ PATH: $ GRADLE_HOME/bin

funciona para my jenkins installation .

ps. Respondo esta vieja pregunta, porque es un problema común al configurar gradle con jenkins. He pasado un tiempo tratando de hacer que la gradle funcione sin éxito.

+0

He configurado gradle_home bajo bash_profile, sigue siendo el mismo problema para mí –

0

Como han notado otros, esto se debe a que Jenkins no puede encontrar el ejecutable de Gradle.

Ninguna de las soluciones publicadas funcionó para mí, pero pude solucionar el problema agregando el directorio de contenedor de gradle a la ruta establecida en .bashrc para la cuenta de compilación en el esclavo de compilación. La modificación de .profile falló, y la configuración de PATH en la configuración del nodo jenkins también falló.

Algunas publicaciones sugieren la configuración de la ruta de Gradle en el menú de herramientas, pero tampoco hay ninguna entrada de Gradle disponible (¿quizás debido a regresiones/cambios de diseño en el complemento de Gradle?).

En cualquier caso, la mejor prueba de que se encontró (abreviatura de funcionamiento de la acumulación de nuevo y estar pendiente de fallo) era correr env a través de SSH:

ssh <host> env 

y comprobar la variable PATH definido de esa manera; Si Gradle no está en ese camino, probablemente no podrá ejecutarlo desde Jenkins.

20

Solución Mastering_the_Object señaló trabajó conmigo formar también, sólo para aclarar los pasos que hay:
sólo la instalación de plug-in Gradle en Jenkins no es suficiente, también debe ir a:
Jenkins-> Administrar Jenkins-> Configurar Jenkins -> Configurar sistema.
En "Gradle Installations" escriba en el nombre (aparece como versión en la configuración del proyecto), marque "Instalar automáticamente" y seleccione la versión. Luego puede seleccionar esa "versión de Gradle" en la configuración del proyecto.

+0

+1 Para señalar la solución sobre cómo encontrar el lugar de configuración. Había visto muchas sugerencias para cambiar la configuración pero ninguna decía dónde encontrarla. – Lmickos

+0

@pad esto me ayudó también. Gracias. – DMA

1

Se usó tanto @Skarab & una serie de otras soluciones aquí para que funcione.

Descargar Gradle (http://gradle.org/downloads), desempaquételo en, por ejemplo,// ​​local/lib/Gradle usr, /etc/perfil abierto y añadir las dos líneas siguientes: GRADLE_HOME exportación =/usr/local/lib/Gradle export PATH = $ PATH: $ GRADLE_HOME/bin

a continuación, en Administrar sistema Jenkins> Configurar> Gradle, GRADLE_HOME definido y dio que la instalación Gradle un nombre

Entonces, {esto podría ser un error} para el proyecto, cambie la versión de Gradle de manera predeterminada a la que he definido anteriormente

11

Cuando se ejecuta Gradle en una máquina de CI como Jenkins, es más conveniente usar la Gradle Wrapper.

En el equipo de desarrollo, que estará en el directorio raíz del proyecto y ejecutar

gradle wrapper 

Entonces, el registro de los archivos resultantes en su sistema de control de código fuente. Después de eso, no tiene que instalar nada en su servidor Jenkins si necesita cambiar las versiones de Gradle. Sólo debe configurar su trabajo Jenkins como esto:

enter image description here

Citando del 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

Esta no es una sugerencia razonable para casi cualquier empresa. Es importante que confiemos en las fuentes de nuestros artefactos y, por lo tanto, la mayoría de las empresas utilizan un repositorio interno. GradleW solo funciona si tiene acceso a internet. No estoy diciendo que esto no sea razonable en otros entornos, solo estoy señalando que probablemente no funcionaría en una empresa. –

+3

No es así. El contenedor está contento con la URL que le proporciones, por lo que no necesita acceso a Internet. Tenemos una copia localmente en caché de Gradle, en un servidor de Artifactory (cualquier servidor HTTP lo haría). El 'gradle-wrapper.properties' debe apuntar a la URL interna en lugar del repositorio oficial. Esto también descarga el servidor oficial y proporciona mejores velocidades de compilación para nuestros lusers locales. Después de la primera descarga del contenedor, no necesita conexión de red para construir en su PC, y las máquinas de CI tienen acceso constante a nuestro repositorio local. – Jolta

+1

El uso de un contenedor es una mejor solución, ya que no es necesario hacer todo el trabajo duro para hacer coincidir las versiones en la configuración global de jenkin y la configuración del proyecto. ¡Mucho más simple! – iCrus

6

que estaba recibiendo este error utilizando la envoltura Gradle, era capaz de solucionar mi construcción roto de la siguiente manera:

  1. Ir a Administrar Jenkins -> Configuración global de herramientas -> Gradle -> Agregar Gradle, gi ve un nombre
  2. Ir a Jenkins -> (su trabajo) -> Configuración -> Construir, elegir la opción "Invocar Gradle" y cambiar la versión Gradle a partir de (por defecto) a la versión llamada
Cuestiones relacionadas