2012-04-18 25 views
17

Jestem nowy w firmie Jenkins CI. Instaluję RVM w moim zdalnym Jenkins i kiedy wykonuję poniżej powłoki.Konfiguracja RVM i Jenkins

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

Dostaję następujące błędy.

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

Co to znaczy? Nie mam pojęcia. Proszę pomóż mi.

AKTUALIZACJA: ja próbowałem poniżej skrypcie, ale wciąż pojawiają się błędy:

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

Błędy:

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

Jenkins budować powłoka nie może wykryć RVM, gemsets i klejnotów. Co powinienem zrobić?

ZAKTUALIZOWANA 2: Dlatego jenkins nie może wykryć rubinu.

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

Nie używam żadnych pluginów Jenn i po prostu uruchamiam skrypt z sekcji Build-> Execute shell.

+0

Zeck, ja wariuję rozwiązać ten problem też, w jaki sposób to naprawić ??? – Farooq

Odpowiedz

11

try:

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

upewnij się uruchomić stabilny RVM:

rvm get stable 

UWAGA: wersja Ostatni Jenkins nie zawsze akceptują "źródło", ale "". RVM_USER to użytkownik, który zainstalował RVM. Alternatywnie można również wyeksportować polecenie RVM do głównej ścieżki PATH.

+0

Po raz pierwszy dziękuję za pomoc. Ale otrzymuję polecenie "rvm: command not found". Proszę zobaczyć moje aktualizacje – Zeck

+0

ponieważ używasz różnych użytkowników do jednej instalacji rvm, upewnij się, że drugi użytkownik 'zeck' używa tego samego RVM - w'/home/zeck/.bashrc' add: 'export PATH = $ PATH:/var/lib/jenkins/.rvm/bin' – mpapis

27

Zgodnie z sugestią błędu, RVM oczekuje powłoki logowania. Zmiana linii hashbang na #!/bin/bash -xl powinna rozwiązać ten problem.

+5

Swoją drogą, sourcing .rvmrc może dużo wydrukować na terminalu. Zamiast tego możesz użyć '#!/Bin/bash -l', a następnie' set -x' po sourcowaniu .rvmrc. – disrupt

+0

Jakie są objaśnienia do czego służą -l i -x? –

+0

Opcja -l daje powłokę logowania, a -x uruchamia bash w trybie debugowania. Byłem w stanie użyć po prostu -l, więc wynik Jenkinsa nie był tak szczegółowy. – bruz

9

Tak, podobno brakuje Ci $HOME/.rvm/bin w swoim PATH. Używam programu rvm z powodzeniem od Hudsona na Mac OS X. Pierwszą rzeczą, którą należy zauważyć, jest to, że jeśli nie zdefiniujesz zmiennej środowiskowej BASH_ENV dla sh), .bashrc jest wywoływana automatycznie tylko z interaktywną powłoką bez logowania. Taka powłoka jest uruchamiany, gdy robisz - na przykład - dodaje z wiersza poleceń:

$ /bin/bash 

Podczas korzystania #!/bin/bash w skrypcie, .bashrc nie zostanie wywołana.

Aby uczynić pracę RVM z Hudson, mam następujących w moim .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" 

Dzięki [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" mam RVM włączony przy każdym uruchomieniu nowego okna terminala (Interactive, login shell).

Nie umieszczam niczego w moim .bashrc, zwłaszcza że nie mam tam skryptów rvm. Nic w tym złego, ale jeśli jakikolwiek inny skrypt robi coś głupiego, jak ustawienie `export BASH_ENV = $ HOME /.bashrc ", a następnie wywołaj nieinteraktywną powłokę, zobaczysz, co może się stać - w rzeczywistości łatwo jest zapomnieć.

Dlatego, zamiast ładować pliki do .bashrc, lepiej zachować niezależność skryptu od dowolnego pliku startowego powłoki i upewnić się, że w skrypcie jest ustawione poprawne środowisko. I jeszcze zachować $HOME/.rvm/bin w moim .bash_profile, ale potem zaliczyć na początku mojego skryptu:

#!/bin/bash 

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

rvm use [email protected] 

set -ex 
cucumber # just an example 

Wskazówka opcja -e który zmusza skrypt, aby wyjść z kodem błędu jeśli komenda po set -ex zawiedzie. Jest to zachowanie, które możesz chcieć podczas używania skryptu z Hudsonem. Niepoprawne jest stwierdzenie, że RVM oczekuje powłoki logowania. Chociaż użycie skryptu #!/bin/bash -l w twoim skrypcie zadziała, nie wydaje się najlepszym podejściem.

+0

Tak, pomogło to. Lokalizacja RVM może się różnić, w moim przypadku była to '[[-s"/usr/local/rvm/scripts/rvm "]] && source"/usr/local/rvm/scripts/rvm "' która działała, razem z 'rvm użyj ruby_name @ gemset_name' – 0x4a6f4672

1

dodanie shebang do poleceń budować w Jenkins stałe to dla mnie

#!/usr/bin/env bash 

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

Ty sir, sprawiłeś, że mój dzień :) – ncuesta

3

Wystarczy dodać ten kod w skrypcie powłoki, myślę RVM jest ładowanie ze źródła więc powinien działać jeszcze trzeba export PATH Zmienna

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

l jest dla shella logowania, jeśli uwzględnisz x, będzie to również dla debugowania.

0

Jenkins węzły nie ładują Ścieżki sam sposób, więc nie używa właściwej ścieżki, aby znaleźć wersję RVM w Ruby. Możesz ustawić ścieżkę dla danego agenta.

  1. Znajdź swoją obecną ścieżkę robi echo $PATH
  2. Zakładając skonfigurowaniu RVM prawidłowo, dowiedzieć się, gdzie wersja RVM za rubinu znajduje uruchamiając which ruby
  3. Istnieje ustawienie w konfiguracji swojego agenta, gdzie może ustawić zmienne środowiskowe. Ustaw zmienną PATH na 1 i 2.