【问题标题】:How to suppress output of 'rm -rf' in Jenkins shell script?如何在 Jenkins shell 脚本中抑制“rm -rf”的输出?
【发布时间】:2020-07-29 12:18:19
【问题描述】:

我有一个很大的 Jenkins 管道,在运行构建时,会生成大量控制台输出,这会导致 Jenkins 主服务器出现空间问题。

我在 Jenkins 管道中使用 Shell 脚本跟踪代码,该脚本记录了每个被删除的文件。我有很多导致大量控制台输出的日志文件 -

stage('Logs Cleanup') {
            steps {
                script {
                    sh '''rm -rf /home/oracle/test/logs1/* /home/oracle/test/logs2/*'''
                }
            }
        }

有什么方法可以抑制该命令的输出?

注意:如果它从终端运行相同的命令,它不会在输出中记录任何内容。

【问题讨论】:

标签: bash shell jenkins jenkins-pipeline sh


【解决方案1】:

仅使用 Jenkins 进行特定删除:

stage('Logs Cleanup') {
    steps {
        dir ('/home/oracle/test/logs1/') {
            deleteDir()
        }
        dir ('/home/oracle/test/logs2/') {
            deleteDir()
        }
    }
}

【讨论】:

    【解决方案2】:

    貌似有一些cmets可以为你解决问题,但是没有人提到你可以通过命令本身来控制sh命令的输出。

    sh 命令有一些optional parameters 可以使用;其中之一是returnStdout。在您的情况下,您可以像这样抑制标准输出:

    stage('Logs Cleanup') {
                steps {
                    script {
                        sh script: 'rm -rf /home/oracle/test/logs1/* /home/oracle/test/logs2/*', returnStdout: false
                    }
                }
            }
    

    还有一些其他有用的参数,例如returnStatus会返回命令的状态码,以供在管道中使用。

    【讨论】:

    • 即使使用 returnStdout=true,这仍然会返回整个输出,例如 rm -rf /home/oracle/test/logs1/a.txt /home/oracle/test/logs1/b.txt ...。但是感谢这将帮助我处理其他情况。
    猜你喜欢
    • 2011-08-23
    • 2011-02-28
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2021-04-09
    • 2021-03-28
    相关资源
    最近更新 更多