2015-05-15 25 views
6

Voglio chiamare uno script di shell nel parametro di riferimento dinamico Uno-Choice ed eseguire alcune operazioni (creare alcuni file e chiamare altri script di shell dallo script di shell chiamato).Come si esegue lo script di shell dallo script groovy Jenkins nell'opzione parametri?

A partire da ora sono in grado di chiamare shell script e cat alcuni file, ma non sono in grado di creare nuovi file o chiamare un altro script di shell da questo.

def sout = new StringBuffer(), serr = new StringBuffer() 

// 1) 
def proc ='cat /home/path/to/file'.execute() 
//display contents of file 

// 2) 
def proc="sh /home/path/to/shell/script.sh".execute() 
//to call a shell script but the above dosent work if I echo some contents 
//into some file. 

proc.consumeProcessOutput(sout, serr) 
proc.waitForOrKill(1000) 
return sout.tokenize() 

ad esempio: - in script.sh se aggiungo linea

echo "hello world" > test 

poi file di test non viene creato

per una maggiore comprensione:

Groovy executing shell commands

http://jenkins-ci.361315.n4.nabble.com/Executing-a-shell-python-command-in-Jenkins-Dynamic-Choice-Parameter-Plugin-td4711174.html

+0

cosa non funziona? tracce, errori, ...? – cfrick

+1

Prova 'sh echo" ciao mondo "> test' o meglio' echo "ciao mondo">/tmp/test' nel caso in cui stia funzionando, ma non hai trovato il file. – Bohemian

+0

Grazie Bohemian. Ma anche questo non funziona. – Triangle

risposta

13

Poiché si stanno eseguendo gli script di bash da un wrapper groovy, lo stdout e lo stderr sono già reindirizzati al wrapper groovy. Per sovrascriverlo, è necessario utilizzare exec all'interno di uno script di shell.

ad esempio:

lo script Groovy:

def sout = new StringBuffer(), serr = new StringBuffer() 

def proc ='./script.sh'.execute() 

proc.consumeProcessOutput(sout, serr) 
proc.waitForOrKill(1000) 
println sout 

Lo script di shell chiamato script.sh e che si trova nella stessa cartella:

#!/bin/bash 
echo "Test redirect" 

Esecuzione del groove con lo script di shell sopra produrrà l'output Test redirect sullo stdout dello script groovy

Ora aggiungere reindirizzamento stdout con exec nel script.sh`:

#!/bin/bash 
exec 1>/tmp/test 
echo "Test redirect" 

Ora l'esecuzione dello script Groovy creerà un file /tmp/test con un contenuto Test redirect

Si può leggere di più su I reindirizzamento/O in bash here

Problemi correlati