web-dev-qa-db-fra.com

Comment désactiver la sortie de commande dans les journaux de construction du pipeline Jenkins

J'utilise Jenkinsfile pour l'écriture de scripts d'un pipeline.

Existe-t-il un moyen de désactiver l'impression des commandes Shell exécutées dans les journaux de génération?

Voici juste un exemple simple d'un pipeline jenkins:

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

qui produit la sortie suivante dans le journal de la console:

[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

Fondamentalement, je voudrais désactiver l'impression des commandes elles-mêmes.

+ echo shellscript.sh arg1 arg2
+ echo shellscript.sh arg3 arg4
22
Vasyl Keretsman

Par défaut, Jenkins démarre les scripts Shell avec des drapeaux -xe. -x Permet une journalisation supplémentaire. -e Fait quitter le script si une commande à l'intérieur renvoie un état de sortie différent de zéro. Pour réinitialiser un indicateur, je suggère deux options:

  1. Appelez set +x Dans le corps de votre script.
  2. Passer la ligne Shebang personnalisée sans -x: sh('#!/bin/sh -e\n' + 'echo shellscript.sh arg1 arg2')

En ce qui concerne la deuxième option, vous pouvez définir une fonction wrapper pour plus de commodité qui ajoutera le script à Shebang personnalisé, puis appellera sh

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

Pour les cas où un post-traitement est requis. J'ai étendu la solution d'origine fournie ici.

Par exemple

def output = printWithNoTrace("ping -c 1 $FQDN | grep PING).trim()

fonction wrapper

def printWithNoTrace(cmd) {
steps.sh (script: '#!/bin/sh -e\n'+ cmd,returnStdout: true)
        }

La sortie Shell est retournée à trim () et enregistrée dans "output"

2
upHiller