2012-04-18 28 views
17

Soy nuevo en Jenkins CI. Estoy instalando RVM en mi Jenkins remoto y cuando ejecuto debajo de shell.Configuración de RVM y Jenkins

#!/bin/bash -x 
source ~/.bashrc 
rvm use [email protected] 

Aparece el mensaje de error.

+ source /var/lib/jenkins/.bashrc 
++ PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/jenkins/.rvm/bin:/var/lib/jenkins/.rvm/bin 
+ rvm use [email protected] 

RVM is not a function, selecting rubies with 'rvm use ...' will not work. 
You need to change your terminal settings to allow shell login. 
Please visit https://rvm.io/workflow/screen/ for example. 

¿Qué significa? No tengo idea. Por favor, ayúdame.

ACTUALIZADO: estoy intentado por debajo de guión, pero sigo teniendo errores:

#!/bin/bash -x 
source /home/zeck/.bashrc 
[[ -s ".rvmrc" ]] && source .rvmrc 
export RAILS_ENV=test 
bundle install 

Errores:

/tmp/hudson457106939700368111.sh: line 5: bundle: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 

Jenkins construir cáscara no puede detectar RVM, gemsets y gemas. ¿Que debería hacer?

ACTUALIZADO 2: Por lo tanto, jenkins no puede detectar ruby.

+ ruby -v 
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILUR 

No estoy usando cualquier Jenkins plugn y estoy ejecutar secuencias de comandos de Generar-> shell sección Ejecutar.

+0

Zeck, me estoy volviendo loco al resolver este problema también, ¿cómo lo arreglaste ??? – Farooq

Respuesta

11

intento:

. $(/home/RVM_USER/.rvm/bin/rvm env [email protected] --path) 

asegúrese de ejecutar el RVM estable:

rvm get stable 

NOTA: versión Última Jenkins no siempre acepta "fuente", pero "". RVM_USER es el usuario que instaló RVM. Como alternativa, también puede exportar el comando RVM en la RUTA principal.

+0

Primero, gracias por intentar ayudar. Pero obtengo 'rvm: comando no encontrado'. Por favor vea mis actualizaciones – Zeck

+0

es porque usa diferentes usuarios para una instalación de rvm, asegúrese de que el segundo usuario 'zeck' use el mismo RVM - en'/home/zeck/.bashrc' agregue: 'export PATH = $ PATH:/var/lib/jenkins/.rvm/bin' – mpapis

27

Como sugiere el mensaje de error, RVM espera un shell de inicio de sesión. Cambiar la línea de hashbang a #!/bin/bash -xl debería resolver esto.

+5

Por cierto, la fuente .rvmrc puede imprimir mucho en la terminal. En su lugar, puede utilizar un '#!/Bin/bash -l', luego haga' set -x' después de obtener .rvmrc. – disrupt

+0

¿Alguna explicación de para qué están usando -l y -x? –

+0

La opción -l le da un shell de inicio de sesión, y -x inicia bash en modo de depuración. Pude usar solo -l para que la salida de Jenkins no fuera tan detallada. – bruz

9

Sí, al parecer se extraña el $HOME/.rvm/bin en su PATH. Estoy utilizando rvm con éxito desde Hudson en Mac OS X. Lo primero que debe tener en cuenta es que, a menos que defina la variable de entorno BASH_ENV (ENV para sh), .bashrc se llama automáticamente solo con el shell interactivo que no es de inicio de sesión. una concha tal se inicia cuando lo hace - por ejemplo - lo siguiente desde la línea de comandos:

$ /bin/bash 

Cuando se utiliza #!/bin/bash en su script, .bashrc no se llamará.

para hacer el trabajo RVM con Hudson, Tengo el siguiente en mi .bash_profile:

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting 
export PATH 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

Gracias a [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" tengo RVM activa cada vez que se inicia una nueva ventana de terminal (interactivo, intérprete de ingreso).

No pongo nada en mi .bashrc, especialmente no estoy comprando scripts rvm allí. No hay nada de malo en eso, pero si cualquier otro script hace algo estúpido como configurar `export BASH_ENV = $ HOME /.bashrc 'y luego invocar un shell no interactivo, verá lo que puede suceder, en realidad es fácil de olvidar.

Por lo tanto, en lugar de cargar cosas en su .bashrc, es mejor mantener su script independiente de cualquier archivo de inicio de shell y asegurarse de que el entorno correcto esté configurado en el script. Todavía guardo en mi $HOME/.rvm/bin.bash_profile, pero luego incluyo lo siguiente en el comienzo de mi guión:

#!/bin/bash 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

rvm use [email protected] 

set -ex 
cucumber # just an example 

Aviso -e la opción que obliga a la secuencia de comandos para salir con el código de error si cualquier comando siguiente set -ex falla. Este es el comportamiento que puede desear al usar el script con Hudson. Es incorrecto decir que RVM espera un shell de inicio de sesión. Aunque usar #!/bin/bash -l en su script funcionará, no parece ser el mejor enfoque.

+0

Sí, esto ayudó. La ubicación de RVM puede diferir, en mi caso fue '[[-s"/usr/local/rvm/scripts/rvm "]] && source"/usr/local/rvm/scripts/rvm "' que funcionó, junto con 'rvm use ruby_name @ gemset_name' – 0x4a6f4672

1

la adición de un tinglado a las órdenes de construcción en Jenkins fijos esto por mí

#!/usr/bin/env bash 

    rvm use 2.0.0 
    bundle install 
    rake test 
    ... 
+0

Usted señor, hizo mi día :) – ncuesta

3

Sólo añadir este código en tu script, creo RVM está cargando desde el origen de lo que debería funcionar otra cosa que exportar PATH variable

#!/bin/bash -l 
source ~/.bashrc 
rvm use [email protected] 

l es para iniciar sesión, si incluye x entonces sería para la depuración también.

0

Los nodos de Jenkins no cargan las rutas de la misma manera, por lo que no está utilizando la ruta adecuada para encontrar la versión de rvm de ruby. Puede establecer la ruta para un agente determinado.

  1. Encuentra tu PATH actual haciendo echo $PATH
  2. Suponiendo que haya configurado RVM adecuadamente, encontrar donde versión de RVM de rubí se encuentra ejecutando which ruby
  3. Hay un ajuste en la configuración de su distribuidor local puede establecer variables ambientales Establezca PATH en 1 y 2 concatenados.