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
)?
Apostolskiej (http://unix.stackexchange.com/a/1498/43764) – Armali