Github Action Runner空间不足:React Native构建失败求助
GitHub Action Runner 存储空间不足问题处理
问题背景
近期在项目中遇到GitHub Action Runner存储空间不足的问题。最初执行构建、运行步骤并生成APK产物时出现该问题,使用uses: jlumbroso/free-disk-space@main清理runner默认文件后暂时解决。但最近在ubuntu-latest runner(官方文档标注提供14GB存储)上构建单个React Native应用时,构建步骤再次触发空间不足。
报错信息
stderr: org.gradle.api.UncheckedIOException: 无法将条目':app:fullstoryDevelopmentRelease'添加到缓存executionHistory.bin(路径:/home/runner/work/mobile-app/mobile-app/android/.gradle/8.0.1/executionHistory/executionHistory.bin)。 at org.gradle.cache.internal.btree.BTreePersistentIndexedCache.put(BTreePersistentIndexedCache.java:162) at org.gradle.cache.internal.DefaultMultiProcessSafePersistentIndexedCache.lambda$put$1(DefaultMultiProcessSafePersistentIndexedCache.java:67) at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.doWriteAction(DefaultFileLockManager.java:216) at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.writeFile(DefaultFileLockManager.java:206) at org.gradle.cache.internal.DefaultCacheAccess$UnitOfWorkFileAccess.writeFile(DefaultCacheAccess.java:471) at org.gradle.cache.internal.DefaultMultiProcessSafePersistentIndexedCache.put(DefaultMultiProcessSafePersistentIndexedCache.java:67) at org.gradle.cache.internal.AsyncCacheAccessDecoratedCache.lambda$putLater$1(AsyncCacheAccessDecoratedCache.java:56) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.cache.internal.CacheAccessWorker$2.run(CacheAccessWorker.java:185) at org.gradle.internal.Factories$1.create(Factories.java:31) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:247) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:228) at org.gradle.cache.internal.CacheAccessWorker.flushOperations(CacheAccessWorker.java:175) at org.gradle.cache.internal.CacheAccessWorker.run(CacheAccessWorker.java:145) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840) Caused by: org.gradle.api.UncheckedIOException: java.io.IOException: 设备上没有剩余空间 at org.gradle.cache.internal.btree.FileBackedBlockStore.write(FileBackedBlockStore.java:140) at org.gradle.cache.internal.btree.CachingBlockStore.flush(CachingBlockStore.java:64) at org.gradle.cache.internal.btree.FreeListBlockStore.flush(FreeListBlockStore.java:103) at org.gradle.cache.internal.btree.StateCheckBlockStore.flush(StateCheckBlockStore.java:85) stdout: at org.gradle.cache.internal.btree.BTreePersistentIndexedCache.put(BTreePersistentIndexedCache.java:160) ... 18 more Caused by: java.io.IOException: 设备上没有剩余空间 at java.base/java.io.RandomAccessFile.writeBytes(Native Method) at java.base/java.io.RandomAccessFile.write(RandomAccessFile.java:558) at org.gradle.internal.io.RandomAccessFileOutputStream.write(RandomAccessFileOutputStream.java:46) at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142) at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) at org.gradle.cache.internal.btree.ByteOutput.done(ByteOutput.java:62) at org.gradle.cache.internal.btree.FileBackedBlockStore$BlockImpl.write(FileBackedBlockStore.java:223) at org.gradle.cache.internal.btree.FileBackedBlockStore.write(FileBackedBlockStore.java:136) ... 22 more 构建失败,出现3个错误。 1: 任务执行失败。 ----------- * 错误原因: 任务':react-native-safe-area-context:prepareLintJarForPublish'执行失败。 > 创建目录'/home/runner/work/mobile-app/mobile-app/node_modules/react-native-safe-area-context/android/build/intermediates/lint_publish_jar/global'时,无法创建父目录'/home/runner/work/mobile-app/mobile-app/node_modules/react-native-safe-area-context/android/build/intermediates/lint_publish_jar' * 尝试方案: > 使用--stacktrace选项获取堆栈跟踪。 > 使用--info或--debug选项获取更多日志输出。 > 使用--scan选项获取完整分析信息。 ============================================================================== 2: 任务执行失败。 ----------- * 错误原因: 任务':app:packageDevelopmentRelease'执行失败。 > 执行com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable时发生失败 > java.io.IOException: 设备上没有剩余空间
解决方案尝试与优化
- 强化磁盘清理:默认的
jlumbroso/free-disk-space可能清理不彻底,可自定义清理步骤,删除Android SDK旧版本、Docker镜像、系统缓存、旧的Node_modules等大文件。示例命令:sudo rm -rf /usr/local/lib/android/sdk/build-tools/*30* sudo rm -rf /var/lib/docker rm -rf ~/.npm - 优化Gradle缓存策略:在构建前清理旧的Gradle缓存,或配置Gradle仅保留最近的缓存记录,避免缓存文件过度膨胀。可添加步骤:
rm -rf android/.gradle/caches - 拆分构建流程:将构建、产物打包等步骤拆分,避免单步骤生成过多临时文件;同时利用GitHub Action的缓存功能,缓存Node_modules、Gradle依赖等重复使用的资源,减少重复下载与生成。
- 监控磁盘使用:在构建前添加磁盘空间检查步骤,定位占用空间的目录,针对性清理:
df -h du -sh /home/runner/work/mobile-app/mobile-app/* | sort -h
内容的提问来源于stack exchange,提问作者Mark Mayo
相关产品推荐
相关产品推荐

