Come posso ottenere l'output di un comando shell eseguito usando in una variabile da Jenkinsfile (groovy)?


213

Ho qualcosa di simile su un Jenkinsfile (Groovy) e voglio registrare lo stdout e il codice di uscita in una variabile per poter utilizzare le informazioni in un secondo momento.

sh "ls -l"

Come posso fare questo, specialmente perché sembra che non si possa davvero eseguire alcun tipo di codice groovy all'interno di Jenkinsfile?



Risposte:


393

L'ultima versione del shpassaggio della pipeline consente di eseguire le seguenti operazioni;

// Git committer email
GIT_COMMIT_EMAIL = sh (
    script: 'git --no-pager show -s --format=\'%ae\'',
    returnStdout: true
).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"

Un'altra caratteristica è l' returnStatusopzione.

// Test commit message for flags
BUILD_FULL = sh (
    script: "git log -1 --pretty=%B | grep '\\[jenkins-full]'",
    returnStatus: true
) == 0
echo "Build full flag: ${BUILD_FULL}"

Queste opzioni sono state aggiunte in base a questo problema.

Vedi la documentazione ufficiale per il shcomando.



Però non funziona con il prefisso "vars". Quando uso solo GIT_COMMIT_EMAIL come nome var senza il prefisso, tutto va bene.
Bastian Voigt,


7
Quando utilizzo la sintassi dichiarativa di jenkinsfile, questo non funziona, il messaggio di errore è:WorkflowScript: 97: Expected a step @ line 97, column 17.
Chiave inglese

17
Sembra che funzioni solo all'interno di un scriptblocco passo. jenkins.io/doc/book/pipeline/syntax/#declarative-steps
brass monkey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.