一、问题定位
我们使用的是Jenkinsfile,存放在git中,而不是分散在各个项目中,好处是便于管理和维护。
见下图:
image.png
image.png
在jenkinsfile文件中写入中文,还有在获取构建人姓名的时候,出现中文乱码问题。
二、场景描述
先读取当前构建人的姓名(一般为中文汉字),然后调用后端Http接口发送消息通知响应的人群。
- 获取构建人的信息
- 调用http接口
1、获取构建人信息
需要安装jenkins 插件:build user vars plugin
具体的groovy语言写法见下:
String buildUser = ""
stage('Get UserInfo') {
steps {
wrap([$class: 'BuildUser']) {
script {
def BUILD_USER = "${env.BUILD_USER}"
def BUILD_USER_ID = "${env.BUILD_USER_ID}"
buildUser = BUILD_USER + "(" + BUILD_USER_ID + ")"
}
}
}
}
http.imNotfiy(buildUser,...,...)
这里的变量buildUser如果包含中文,会出现乱码问题。。。
这里容易有个误区,以为在Jenkins全局配置里设置了字符集为utf-8就能解决该问题。
image.png
image.png
image.png
其实上述的设置是针对master节点,而非slave节点。而我们的pipeline是运行于slave节点上。我们得在节点设置中,对pod template增加环境变量才是正确的方式。
image.png
image.png
image.png
image.png
image.png
image.png
2、调用http接口
# 注意contentType必须为APPLICATION_JSON_UTF8,否则还会出现中文字符乱码的问题
def request(reqType, reqUrl, reqBody, reqFile = '', contentType = "APPLICATION_JSON_UTF8") {
def response = httpRequest httpMode: reqType,
contentType: contentType,
consoleLogResponseBody: true,
ignoreSslErrors: true,
uploadFile: reqFile,
requestBody: reqBody,
url: "${reqUrl}",
timeout: 600
return response
}
三、总结
解决乱码需要做好两步: