我们在Windows的Jenkins下运行每晚生成的版本,其中包括一个Android应用程序。詹金斯(Jenkins)调用运行我们大部分构建的Ant,并在构建的一部分过程中,蚂蚁调用Gradle构建(或测试)我们的Android应用。
大多数情况下,它可以正常工作,但是我们看到一些间歇性故障,因为在我们尝试构建Android App时,Android构建缓存被锁定了。这是最近的错误:
[exec] :app:transformClassesWithStackFramesFixerForDebug FAILED
[exec] 82 actionable tasks: 77 executed, 5 up-to-date
[exec]
[exec] FAILURE: Build failed with an exception.
[exec]
[exec] * What went wrong:
[exec] Execution failed for task ':app:transformClassesWithStackFramesFixerForDebug'.
[exec] > com.android.build.api.transform.TransformException: java.io.UncheckedIOException: java.nio.file.FileSystemException: C:\Users\console\.android\build-cache\3.1.2.lock: The process cannot access the file because it is being used by another process.
当然,当我登录到Jenkins服务器时,没有任何东西持有该锁(锁文件仍然存在),如果我重新运行Jenkins构建,它将通过。
我见过的大多数解决方案都是“清除缓存”类型的答案,这将适用于持久性锁定问题(我们是间歇性的),但不会阻止问题再次出现。如果构建被取消或崩溃,这将很有用,但这不是这种情况。
另一个不好的选择是禁用构建缓存,但是这样我们就失去了拥有构建缓存的性能优势。
我强烈怀疑这是Windows文件系统的问题,该文件系统实际上不再拥有该锁,但是文件系统认为仍然存在该锁。
欢迎提供有关如何防止这些构建失败的任何建议。