2013-08-02 20 views
5

Skonfigurowałem zadanie Jenkinsa do źródła skryptu Bash, który źródła innego skryptu bash, który dodaje alias do .bashrc jego użytkownika i źródła samego .bashrc, a następnie oryginalny skrypt próbuje użyj tego aliasu (ustawionego przez drugi). Jednak nie może znaleźć aliasu, który właśnie utworzył. Nie używam żadnych wtyczek do skryptów poza używaniem kroku kompilacji "Wysyłaj pliki lub wykonuj polecenia przez SSH", aby pobrać skrypt.Jenkins nie może uzyskać dostępu do aliasu powłoki

Zadanie to robi:

source ./test_script.sh 

test_script.sh wygląda następująco:

echo "In test_script.sh" 
echo $USER 
echo $HOME 
source ./setup_env.sh 
echo "\nBack in test_script.sh" 
alias foo 
foo 

i wreszcie setup_env.sh wygląda następująco:

echo "\nIn setup_env.sh" 
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc 
source $HOME/.bashrc 2>/dev/null 
cat $HOME/.bashrc 

Wyjście otrzymam od Jenkins zadanie wygląda tak:

In test_script.sh 
my_user 
/home/my_user 
\nIn setup_env.sh 
...all of my bashrc... 
alias foo="echo foo" 
\nBack in test_script.sh 
alias foo='echo foo' 
./test_script.sh: line 7: foo: command not found 

Nie rozumiem, dlaczego tak się dzieje, kiedy mogę szczęśliwie uruchomić go samodzielnie na linii poleceń i obejrzeć, jak się to uda. Dlaczego Jenkins nie może użyć nowego aliasu, jeśli oczywiście może go znaleźć (o czym świadczy wynik polecenia alias foo)?

+0

Apostolskiej (http://unix.stackexchange.com/a/1498/43764) – Armali

Odpowiedz

4

The \n, która jest wyświetlana na wyjściu twoich poleceń echo
sugerują, że to nie jest uruchomiony pod bash, jak można oczekiwać.

Proszę sprawdzić ustawienia swojego Jenkins użytkowników
(lub dowolny inny użytkownik, który prowadzony Jenkins z) -
zwłaszcza ustawienie domyślnej powłoki.

Aby to sprawdzić, należy dodać jedną z tych linii na początku skryptu:

env 

lub

env | grep -i shell 

powinny również rozważyć upewniając skrypty uruchamiane przy prawidłowej powłoki,
przez dodanie linii "shebang" jako pierwszej linii w każdym skrypcie.
W przypadku „bash”, na przykład, należy dodać następujący wiersz: pierwszy

#!/bin/bash 

(to nie jest komentarz, mimo tego, co auto-syntax-highlighter mogą myśleć ...)

7

dla każdego, kto jest ten problem, może trzeba ustawić opcję expand_aliases powłoka, która wydaje się być domyślnie wyłączona z Jenkins [? Dlaczego nie mój skrypt Bash rozpoznać aliasy]

shopt expand_aliases # check if it's on 
shopt -s expand_aliases # set expand_aliases option to true 
shopt expand_aliases # it should be on now 

# test with a simple alias, should print 1 
alias x="python -c 'print 1'" 
x 
Powiązane problemy