Bitbucket流水线构建Android应用出现无法列出文件系统报错如何解决
对应报错日志:
> Task :mobile:lintDebug Wrote HTML report to file:///opt/atlassian/pipelines/agent/build/mobile/build/reports/lint-results-debug.html BUILD SUCCESSFUL in 2m 51s 41 actionable tasks: 41 executed Unable to list file systems to check whether they can be watched. The whole state of the virtual file system has been discarded. Reason: Could not query file systems: could not open mount file (errno 2: No such file or directory)
报错原因
- 该警告由Gradle 7.0及以上版本新增的虚拟文件系统(VFS)监听特性触发:该特性会读取
/proc/self/mountinfo文件查询系统挂载的文件系统,判断哪些路径支持文件变更监听,用于提升本地增量构建的执行速度。 - Bitbucket Pipelines默认的构建Docker容器做了权限裁剪,未向容器内部暴露
/proc/self/mountinfo文件,导致Gradle读取文件失败抛出该警告。 - 该警告属于非致命错误,不会影响构建产物的正确性,日志中的
BUILD SUCCESSFUL已经说明Android应用构建流程已经正常执行完成。
解决方案
- 方案1:禁用Gradle VFS监听(最推荐,流水线为一次性干净构建环境,该特性无实际使用价值)
直接在项目根目录的gradle.properties文件中添加如下配置即可完全消除警告:
如果你不想修改项目代码,也可以在流水线的构建命令中动态添加参数禁用该特性:org.gradle.vfs.watch=false./gradlew <你的构建任务名> -Dorg.gradle.vfs.watch=false - 方案2:给构建容器挂载proc目录
若你需要保留VFS监听特性,可以修改bitbucket-pipelines.yml的构建配置,启动构建容器时添加挂载参数,将宿主机的/proc目录挂载到容器内部:script: - docker run --volume /proc:/proc <你的构建镜像名称> <构建执行命令>
内容的提问来源于stack exchange,提问作者Martin Zeitler
相关产品推荐
相关产品推荐

