2012-04-18 18 views
17

Sono nuovo di Jenkins CI. Sto installando RVM nel mio Jenkins remoto e quando eseguo sotto shell.Impostazione RVM e Jenkins

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

Ottengo errori seguenti.

+ 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. 

Che cosa significa? Non ne ho idea Mi aiuti per favore.

AGGIORNAMENTO: Sto provato sotto sceneggiatura, ma ho ancora errori:

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

Errori:

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

Jenkins costruire shell non in grado di rilevare RVM, gemsets e gemme. Cosa dovrei fare?

AGGIORNATO 2: Pertanto jenkins non è in grado di rilevare il rubino.

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

non sto usando qualsiasi Jenkins plugn e io sono solo eseguire script da Build-> sezione shell Esegui.

+0

Zeck, sto impazzendo a risolvere anche questo problema, come l'hai risolto ??? – Farooq

risposta

11

prova:

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

assicurarsi di eseguire l'RVM stabile:

rvm get stable 

NOTA: versione Ultimo Jenkins non sempre accetta "fonte", ma "". RVM_USER è l'utente che ha installato RVM. In alternativa è anche possibile esportare il comando RVM nel PATH principale.

+0

Molto primo grazie per aver cercato di aiutare. Ma ottengo 'rvm: comando non trovato'. Si prega di vedere i miei aggiornamenti – Zeck

+0

perché si usano utenti diversi per una installazione di rvm, assicurarsi che il secondo utente 'zeck' usi lo stesso RVM - in'/home/zeck/.bashrc' aggiungi: 'export PATH = $ PATH:/var/lib/jenkins/.rvm/bin' – mpapis

27

Come suggerisce il messaggio di errore, RVM si aspetta una shell di login. La modifica della riga di hashbang su #!/bin/bash -xl dovrebbe risolvere questo problema.

+5

A proposito, il sourcing .rvmrc può stampare molto sul terminale. Potresti invece usare un '#!/Bin/bash -l', quindi fare' set -x' dopo aver fatto il sourcing .rvmrc. – disrupt

+0

Qualche spiegazione di cosa stanno usando -l e -x? –

+0

L'opzione -l fornisce una shell di login e -x avvia bash in modalità di debug. Sono stato in grado di usare solo -l in modo che l'output di Jenkins non fosse così dettagliato. – bruz

9

Sì, a quanto pare si perde lo $HOME/.rvm/bin nel proprio PATH. Sto usando rvm con successo da Hudson su Mac OS X. La prima cosa da notare è che, a meno che non si definisce BASH_ENV variabile d'ambiente (ENV per sh), .bashrc si chiama automaticamente solo con shell non di login interattiva. Tale shell viene avviata quando si esegue - per esempio - la seguente dalla riga di comando:

$ /bin/bash 

Quando si utilizza #!/bin/bash nello script, non sarà chiamato .bashrc.

per rendere il lavoro rvm con Hudson, ho il seguente nel mio .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" 

Grazie a [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" Ho rvm attivato ogni volta che inizio una nuova finestra di terminale (interattivo, shell di login).

non metto nulla nella mia .bashrc, soprattutto non sto Sourcing script RVM lì. Niente di male in questo, ma se qualche altro script rende qualcosa di stupido come l'impostazione `export BASH_ENV = $ HOME /.bashrc 'e quindi invoca shell non interattiva, puoi vedere cosa può accadere - in realtà è facile da dimenticare.

Pertanto, anziché caricare elementi nel file .bashrc, è meglio mantenere il proprio script indipendente da qualsiasi file di avvio della shell e assicurarsi che sia impostato l'ambiente corretto all'interno dello script. Conservo ancora $HOME/.rvm/bin nel mio .bash_profile, ma poi io includo quanto segue all'inizio del mio script:

#!/bin/bash 

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

rvm use [email protected] 

set -ex 
cucumber # just an example 

Avviso l'opzione -e che costringe lo script per uscire con il codice di errore se qualsiasi comando seguente set -ex fallisce. Questo è il comportamento che potresti volere quando usi lo script con Hudson. Non è corretto affermare che RVM si aspetta una shell di login. Anche se l'utilizzo di #!/bin/bash -l nel tuo script funzionerà, non sembra l'approccio migliore.

+0

Sì, questo ha aiutato. La posizione di RVM può essere diversa, nel mio caso era '[[-s"/usr/local/rvm/scripts/rvm "]] && source"/usr/local/rvm/scripts/rvm "' che funzionava, insieme a 'rvm usa ruby_name @ gemset_name' – 0x4a6f4672

1

l'aggiunta di una baracca ai comandi di compilazione a Jenkins fisse questo per me

#!/usr/bin/env bash 

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

Lei signore, ha reso la mia giornata :) – ncuesta

3

Basta aggiungere questo codice nel tuo script di shell, penso che rvm sta caricando dalla sorgente così dovrebbe funzionare altrimenti necessario esportare PATH variabile

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

l è per il login Shel, se si include x allora sarebbe troppo per il debug.

0

I nodi Jenkins non caricano i percorsi allo stesso modo, quindi non sta utilizzando il percorso corretto per trovare la versione di ruby ​​di rvm. È possibile impostare il percorso per un determinato agente.

  1. Trovate il vostro percorso corrente facendo echo $PATH
  2. Supponendo che hai impostato rvm correttamente, trovare dove la versione di RVM di Ruby si trova eseguendo which ruby
  3. C'è un'impostazione nella configurazione del vostro agente di cui si può impostare variabili ambientali. Impostare PATH per essere 1 e 2 concatenati.