1 背景
最近在协助开发 SDK 的特性时,出现了很多崩溃,定位时就需要崩溃日志来帮助确定原因。由于协议组同学对于 iOS 开发不熟悉也缺少开发环境,所以经常需要帮他们解析崩溃日志,一来二去效率并不高。如果可以让他们自己来符号化日志,就可以节省来回的时间,于是就产生了将符号化工具部署在 Jenkins 上的想法。
2 实现
总体的思路就是通过脚本来在进行符号化,并利用 Jenkins 来进行输入和输出。
2.1 脚本编写
由于 iOS 15 后,崩溃日志的格式发生了变更,使用脚本进行符号化崩溃日志,需要区分 iOS15 之前和 iOS 15 之后。
iOS 15 之前: 利用 symbolicatecrash 工具来进行符号化,使用方法如下,
iOS15之后: 使用 CrashSymbolicator.py 工具,用法如下
2.2 Jenkins 配置
Jenkins 在这里主要承担的是输入输出的作用,执行所需要的输入如下:
在 Build 阶段选择执行 shell 脚本,内容如下:
# 将文件命名为与上传文件一致
mv crashlog $crashlog
# 清空结果文件夹
{ rm -r result } || { echo "Result folder does not exist" }
python "./script/symbolization.py"
# 执行完成后,删除多余临时文件
for file in ./*
do
if [ -d "$file" ] && [ "$file" != "./result" ] && [ "$file" != "./script" ]
then
rm -r "$file"
elif [ -f "$file" ]
then
rm "$file"
fi
done
{ rm .DS_Store } || { echo ".DS_Store does not exist" }
由于符号化后的日志不需要留有记录,故没有专门做存储的功能,直接通过访问该任务的 Workspace 来取结果文件即可,如下图所示。
完整脚本可参考 github