2013-08-02 8 views
5

ich einen Jenkins Job so konfiguriert haben, ein Bash-Skript Quelle, die andere Bash-Skript Quellen, die einen Alias ​​zum .bashrc seiner Benutzer hinzufügt und Quellen der .bashrc selbst, und dann Original-Skript versucht, benutze diesen Alias ​​(gesetzt durch den zweiten). Es scheint jedoch nicht den Alias ​​zu finden, den er gerade erstellt hat. Ich verwende keine Skript-Plugins, abgesehen von der Verwendung eines Build-Schritts "Dateien senden oder Befehle über SSH ausführen", um das Skript zu beziehen.Jenkins kann nicht Shell-Alias ​​zugreifen

Der Job tut dies:

source ./test_script.sh 

test_script.sh wie folgt aussieht:

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

Und schließlich sieht setup_env.sh wie folgt aus:

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

Der Ausgang I von der Jenkins erhalten Job sieht so aus:

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 

Ich verstehe nicht, warum das passiert, wenn ich es selbst auf der Kommandozeile laufen lassen und es erfolgreich verfolgen kann. Warum kann Jenkins den neuen Alias ​​nicht verwenden, wenn er ihn offensichtlich finden kann (wie durch die Ausgabe des Befehls alias foo gezeigt)?

+0

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

Antwort

4

Die \n, die in der Ausgabe Ihrer echo Befehle
vorschlagen dies unter fliessendem zeigt nicht bash, wie Sie erwarten können.

Bitte überprüfen Sie die Einstellung Ihrer jenkins Benutzer
(oder jede andere Benutzer, die Sie Jenkins mit laufen) -
besonders die Einstellung der Standard-Shell.

Um dies zu testen, fügen Sie eine dieser Zeilen am Anfang des Skriptes:

env 

oder

env | grep -i shell 

auch sicher, dass unter den richtigen Shell führen Sie Ihre Skripte machen in Betracht ziehen sollten,
indem Sie die Zeile "shebang" als erste Zeile in jedem Skript hinzufügen.
Im Fall von ‚bash‘, zum Beispiel, sollten Sie die folgende erste Zeile hinzu:

#!/bin/bash 

(es keinen Kommentar ist, trotz allem, was das Auto-Syntax-Highlighter ... denken kann)

7

Für alle anderen, die dieses Problem hat das, müssen Sie möglicherweise die expand_aliases Shell Option setzen, die aus mit Jenkins standardmäßig zu sein scheint: [? Warum meine Bash-Skript nicht Aliase erkennen]

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