如何在jenkins管道生成日志中禁用命令输出

ax6ht2ek  于 2023-02-11  发布在  Jenkins
关注(0)|答案(2)|浏览(392)

我正在使用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
eoxn13cs

eoxn13cs1#

默认情况下,Jenkins使用-xe标志启动shell脚本。-x启用额外的日志记录。-e使脚本退出,如果其中任何命令返回非零退出状态。要重置标志,我建议两个选项:
1.在脚本主体中调用set +x

sh 'set +x'

1.通过自定义shebang行,无-x

sh('#!/bin/sh -e\n' + 'echo shellscript.sh arg1 arg2')

至于第二个选项,您可以定义一个 Package 器函数以方便使用,该函数将在脚本前面添加自定义shebang,然后调用sh

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

xqnpmsa82#

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

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

Package 函数

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

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

相关问题