问题描述
Jenkins的Console Output中有时会看到‘+’开头的shell命令调试信息,看起来比较混乱。
原因是Jenkins默认用‘-xe’的选项去运行‘sh’命令。例如下面这样的。
这种看着就头大。作为一个强迫症患者,咱必须解决掉!!!
解决方法
只需要在pipeline中定义一个方法。后面所有使用shell命令的时候调用这个方法即可。
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命令 的地方使用:
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日志输出的内容:
完美解决~