scalatest单测本地正常Jenkins报scalafix.sbt.ScalafixFailed: TestError如何排查
[error] (scalafixAll) scalafix.sbt.ScalafixFailed: TestError
排查步骤
- 明确错误归属:该报错不属于单元测试执行失败,是sbt执行
scalafixAll代码规范检查任务时抛出的错误,发生在测试用例编译、执行环节之前,因此不会输出任何测试用例相关的堆栈信息。 - 本地复现验证:不要单独执行
sbt test,需在本地执行和Jenkins完全一致的全量构建命令,通常Jenkins的构建流程会默认包含scalafixAll检查,本地开发时很少主动执行该任务,是最常见的本地、CI表现不一致的诱因。 - 开启scalafix详细日志:执行任务时添加参数
sbt -Dscalafix.verbose=true <你的构建命令>,或在项目的sbt配置中添加scalafixVerbose := true,重新运行即可输出具体的违规文件、行号、违反的规则名称,或是scalafix规则加载、依赖缺失的具体原因。 - 核对环境差异:逐一对比本地和Jenkins的运行环境,排查不一致项:
- 项目根目录下的
.scalafix.conf规则配置文件是否在两边一致,是否存在CI侧额外注入的规则配置 - 项目依赖的scalafix规则包、scalafix sbt插件版本是否对齐,是否存在Jenkins侧无法拉取私有规则包的情况
- Scala版本、sbt版本是否一致,部分旧版本scalafix插件和高版本Scala存在兼容性问题
- 项目根目录下的
- 快速定位验证:可以临时给Jenkins的sbt启动命令添加
-Dscalafix.skip=true参数关闭scalafix检查,若跳过之后测试正常执行,即可完全确认问题出在scalafix环节,无需排查测试用例本身逻辑。 - 检查文件换行符/编码差异:若本地为Windows环境、Jenkins为Linux环境,git拉取代码时自动转换换行符可能触发部分scalafix规则报错,可配置git的
core.autocrlf参数对齐两边的换行符规则。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

