在Jenkins的Console Output中有時會看到‘+’開頭的shell命令調試信息,看起來比較混亂。原因是Jenkins默認用‘-xe’的選項去運行‘sh’命令。例如如下pipeline會產生后續的輸出。

pipeline {
    agent none
    stages {
        stage('Example') {
            steps {
                node('master') {
                    sh 'dmesg | grep raspberrypi | grep soc' 
                }
            }
        }
    }
}

輸出:

[Pipeline] sh
+ dmesg
+ grep raspberrypi
+ grep soc

解決方法是自定義一個運行shell腳本的函數,并在每個命令行前加入‘#!/bin/sh -e\n’選項。

def mysh(cmd, returnStatus) {
    return sh (script: '#!/bin/sh -e\n'+ cmd, returnStatus: returnStatus)
}

pipeline {
    agent none
    stages {
        stage('Example') {
            steps {
                node('master') {
                    mysh ('dmesg | grep raspberrypi | grep soc', true)
                }
            }
        }
    }
}

參考鏈接:

https://stackoverflow.com/questions/39891926/how-to-disable-command-output-in-jenkins-pipeline-build-logs