2016-10-06 1 views
6

Ich verwende Jenkinsfile für das Scripting einer Pipeline.Wie zum Deaktivieren der Befehlsausgabe in jenkins pipeline Build-Protokolle

Gibt es eine Möglichkeit, das Drucken von ausgeführten Shell-Befehlen in Build-Logs zu deaktivieren?

Hier ist nur ein einfaches Beispiel einer Pipeline Jenkins:

node{ 
    stage ("Example") { 
    sh('echo shellscript.sh arg1 arg2') 
    sh('echo shellscript.sh arg3 arg4')   
    } 
} 

die folgende Ausgabe in Konsolenprotokoll erzeugt:

[Pipeline] node 
Running on master in /var/lib/jenkins/workspace/testpipeline 
[Pipeline] { 
[Pipeline] stage 
[Pipeline] { (Test) 
[Pipeline] sh 
[testpipeline] Running shell script 
+ echo shellscript.sh arg1 arg2 
shellscript.sh arg1 arg2 
[Pipeline] sh 
[testpipeline] Running shell script 
+ echo shellscript.sh arg3 arg4 
shellscript.sh arg3 arg4 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

Grundsätzlich würde ich selbst das Drucken der Befehle deaktivieren möchte.

+ echo shellscript.sh arg1 arg2 
+ echo shellscript.sh arg3 arg4 

Antwort

15

Standardmäßig startet Jenkins Shell-Skripte mit Flags -xe. -x ermöglicht zusätzliche Protokollierung. -e bewirkt, dass das Skript beendet wird, wenn ein Befehl einen Nicht-Null-Beendigungsstatus zurückgibt. Um eine Flagge zurückzusetzen, würde ich zwei Optionen vorschlagen:

  1. Anruf set +x in den Körper Ihres Skripts.
  2. Pass individuelle shebang Linie ohne -x: sh('#!/bin/sh -e\n' + 'echo shellscript.sh arg1 arg2')

für die zweite Option Wie Sie eine Wrapper-Funktion für Bequemlichkeit definieren kann, die das Skript mit benutzerdefinierten shebang prepend und dann sh

def mysh(cmd) { 
    sh('#!/bin/sh -e\n' + cmd) 
} 
+0

Dank nennen, Izzekil. Vorschlag # 2 behob das Problem. –

+0

Dies ist für jeden, der für Windows arbeitet => output = bat (returnStdout: true, Skript: '') –