Как отключить вывод команды в журналах сборки конвейера jenkins

Я использую Jenkinsfile для сценариев конвейера.

есть ли способ отключить печать выполненных команд оболочки в журналах сборки?

вот простой пример конвейера Дженкинса:

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

который производит следующий вывод в журнале консоли:

[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

В основном я хотел бы отключить печать самих команд.

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

2 ответов


по умолчанию Дженкинс запускает скрипты с флагами -xe. -x включает дополнительное ведение журнала. -e делает выход скрипта, если какая-либо команда внутри возвращает ненулевое состояние выхода. Чтобы сбросить флаг, я бы предложил два варианта:

  1. вызов set +x в теле скрипта.
  2. пройдите пользовательскую линию shebang без -x: sh('#!/bin/sh -e\n' + 'echo shellscript.sh arg1 arg2')

как для второго варианта вы можете определить функцию оболочки для удобства которая добавит скрипт с пользовательским shebang, а затем вызовите sh

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

для случаев, когда требуется обработка post. Я расширил оригинальное решение, представленное здесь.

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

функции-оболочки

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

вывод оболочки возвращается в trim () и сохраняется в "output"