如何在jenkins管道构建日志中禁用命令输出

如何在jenkins管道构建日志中禁用命令输出,jenkins,jenkins-pipeline,jenkinsfile,Jenkins,Jenkins Pipeline,Jenkinsfile,我正在使用Jenkinsfile编写管道脚本 是否有任何方法可以禁用在生成日志中打印已执行的shell命令 以下是jenkins管道的一个简单示例: node{ stage ("Example") { sh('echo shellscript.sh arg1 arg2') sh('echo shellscript.sh arg3 arg4') } } 在控制台日志中生成以下输出: [Pipeline] node Running on master in

我正在使用Jenkinsfile编写管道脚本

是否有任何方法可以禁用在生成日志中打印已执行的shell命令

以下是jenkins管道的一个简单示例:

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

默认情况下,Jenkins使用标志
-xe
启动shell脚本<代码>-x启用附加日志记录
-e
使脚本在任何命令返回非零退出状态时退出。要重置标志,我建议两个选项:

  • 在脚本正文中调用
    set+x
  • 不带
    -x
    传递自定义shebang行:
    sh('#!/bin/sh-e\n'+'echo shellscript.sh arg1 arg2')
  • 至于第二个选项,为了方便起见,您可以定义一个包装函数,该函数将在脚本前面加上自定义shebang,然后调用
    sh

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

    对于需要进行后处理的实例。我扩展了这里提供的原始解决方案

    比如说

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

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

    shell输出返回到trim()并保存到“output”

    这适用于为windows=>output=bat工作的任何人(returnStdout:true,脚本:“”)。正在为管道脚本中的每个sh打印“别名”列表。我没有弄清楚每个sh命令调用“alias”的位置/方式。但是只使用“-e”和不使用“-x”导致别名列表不再显示。请注意,在Jenkins提供的新“蓝海”视图中,这些环境变量仍将在UI中可见。我们通过将命令写入一个文件(使用writefile管道步骤),然后执行该文件来解决这个问题。