问题描述

Jenkins的Console Output中有时会看到‘+’开头的shell命令调试信息,看起来比较混乱。

原因是Jenkins默认用‘-xe’的选项去运行‘sh’命令。例如下面这样的。 image.png

这种看着就头大。作为一个强迫症患者,咱必须解决掉!!!

解决方法

只需要在pipeline中定义一个方法。后面所有使用shell命令的时候调用这个方法即可。

image.png

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

pipeline {
    agent any
    options {
        timestamps()
        skipDefaultCheckout(true) // 使用 options 块中的 skipDefaultCheckout(true) 来禁止默认的代码检出,从而避免显示 checkout 步骤本身。
    }
// 此处省略N行... ...
在需要调用shell命令 的地方使用:

image.png

        stage('Config') {
            when {
                not {
                    environment name: 'SRV_ENV', value: ''
                }
            }
            steps {
                script {
                    def fileContent = readFile("$OBS_CONF_FILE")
                    // 创建 Properties 对象,并加载文件内容
                    def properties = new Properties()
                    properties.load(new StringReader(fileContent))
                    // 将键值对存储到 FILE_CONTENT_MAP 变量中
                    FILE_CONTENT_MAP = properties
                    // 获取键值对的值
                    OBS_AK = "${FILE_CONTENT_MAP['ak']}"
                    OBS_SK = "${FILE_CONTENT_MAP['sk']}"

                    // 配置obsutil,禁止输出命令本身
                    mysh("${Obsutil_CMD} config -i=${OBS_AK} -k=${OBS_SK} -e=${OBS_ENDPOINT}",true)
                    println("\u001B[30;42mobsutil初始化配置成功!\u001B[0m")
                }
            }
        }

再来看看Jenkins日志输出的内容: image.png

完美解决~