2013-08-02 27 views
5

Ho configurato un lavoro Jenkins alla fonte uno script bash che le fonti un altro script bash che aggiunge un alias al .bashrc dei suoi utenti e le fonti del .bashrc in sé, e quindi script originale cerca di usa quell'alias (impostato dal secondo). Tuttavia, non riesco a trovare l'alias che ha appena creato. Non sto usando alcun plug-in di scripting oltre all'usare un passo "Invia file o esegui comandi su SSH" per dare origine allo script.Jenkins non può accedere alias di shell

Il lavoro fa questo:

source ./test_script.sh 

test_script.sh assomiglia a questo:

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

E, infine, setup_env.sh assomiglia a questo:

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

L'uscita che ricevo dalla Jenkins lavoro assomiglia a questo:

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 

Non capisco perché questo sta accadendo, quando posso gestirlo felicemente da solo sulla riga di comando e guardarlo avere successo. Perché Jenkins non può usare il nuovo alias, quando può ovviamente trovarlo (come dimostrato dall'output del comando alias foo)?

+0

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

risposta

4

Il \n che sta mostrando in uscita dei tuoi comandi echo
suggeriscono questo non è in esecuzione con bash, come si può essere in attesa.

Si prega di controllare le impostazioni del vostro Jenkins utente
(o qualsiasi altro utente che si esegue Jenkins con) -
soprattutto l'impostazione della shell di default .

Per verificare ciò, aggiungi una di quelle linee all'inizio del vostro script:

env 

o

env | grep -i shell 

dovrebbe anche considerare rendere sicuro il vostro script eseguiti sotto la scocca corretta,
aggiungendo la riga "shebang" come prima riga in ogni script.
Nel caso di 'bash', per esempio, si dovrebbe aggiungere la seguente prima riga:

#!/bin/bash 

(non è un commento, nonostante quello che l'auto-sintassi evidenziatore può pensare ...)

7

per chiunque altro che sta avendo questo problema, potrebbe essere necessario impostare l'opzione expand_aliases shell, che sembra essere disattivata per impostazione predefinita con Jenkins: [? Perché lo script Bash riconosce alias]

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 
Problemi correlati