svnhook处理中文乱码
- 持续集成
- 2022-08-17
- 14热度
- 0评论
背景
通过 jenkins + svn 做 CI,每次开发 commit 代码后,自动触发svn hook post-commit ,执行 curl 来调用 jenkins pipeline,curl 传递传递 svnlog 参数,svnlog 为对应需求的编号和摘要,摘要含有中文。
在jenkins pipeline 中对 由 svnhook 传递来的 svnlog 输出,中文显示乱码:
post-commit 脚本内容如下:
AUTHOR=`svnlook author /data/repository/view/`
LOG_MESG=`svnlook log /data/repository/view/`
LM=`echo ${LOG_MESG} |sed 's/ /%20/g'`
VER=`svnlook youngest /data/repository/view/`
params=`svnlook changed /data/repository/view |awk '{print $2}' |awk '{split($0, a, "/");print a[1]","a[2]}'|awk '!($1 in a){a[$1];print $1}' |awk NF`
for param in $params
do
arr=(`echo $param |awk '{split($0,a,","); print a[1],a[2]}'`)
if [[ ${arr[0]} != "" ]];then
if [[ ${arr[0]} == "6001_feigai" ]];then
arr[0]="01_SIT"
elif [[ ${arr[0]} == "8002" ]];then
arr[0]="03_SIM"
fi
curl -k -X POST http://xxx.xxxx.xxxx:8081/job/${arr[0]}/job/${arr[1]}/buildWithParameters -d OnlyRestart=false -d jarsto=\"\" -d "author=${AUTHOR}" -d "logmsg=${LOG_MESG}" -d "svnrev=${VER}" --user scm:**********
fi
done
开始以为是jenkins接收到参数后,参数编码解码有问题,通过 tcpdump 抓包发现,svnhook调用curl发送请求时参数就已经乱码了。
手动在svnserver 上执行调用 post-commit ,中文传递正常。
问题原因
环境变量中的语言设置问题,svnhook调用时的环境变量 $LANG 不对,和我直接通过 xshell ssh 到 svnserver 上的 $LANG 不一样,导致中文乱码。
解决方法
在 post-commit 脚本前,增加 LANG 的环境变量设置 :export LANG=zh_CN.UTF-8
也可以设置其他编码,按需设置。