You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CircleCI构建时React Native Bundle卡顿挂起,SSH环境可绕过

CircleCI + Fastlane构建React Native Android卡在yarn bundle-android超时问题排查与解决

问题背景

基于React Native 0.70.7、React 18.2.0、Fastlane 2.212.1搭建流程:通过CircleCI(使用cimg/android:2023.02.1-node镜像)调用Fastlane完成Android SDK构建,并推送至内部S3存储桶。执行Fastlane的staging lane时,在yarn bundle-android步骤卡顿挂起,默认10分钟超时终止,即使将超时限制提升至30分钟仍无法完成。

Fastfile的staging lane包含环境配置、bundle打包、Gradle构建、S3上传流程;CircleCI的config.yaml包含依赖安装、缓存、编译、Fastlane执行环节。

已做排查

  • SSH进入CI容器后,修改GEM_HOME并重新安装bundle,可跳过卡顿步骤,但正常CI构建仍会挂起
  • 本地拉取相同Docker镜像执行全流程无异常,曾出现过137内存不足错误,但SSH环境未复现该问题

可能的解决方案

1. 给Node进程增加内存配额

yarn bundle-android本质是调用React Native的bundle命令,Node进程可能因内存不足进入假死状态(无输出但未退出),而非直接触发137 OOM kill。可通过以下方式调整:

  • 在CircleCI步骤中直接指定Node内存:
node --max-old-space-size=8192 $(which yarn) bundle-android
  • 或修改package.json中的脚本:
"scripts": {
  "bundle-android": "node --max-old-space-size=8192 node_modules/react-native/cli.js bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res"
}

2. 提升CircleCI资源配置

默认的CircleCI executor资源可能不足以支撑React Native打包,在config.yaml中调整资源等级:

jobs:
  build-android-sdk:
    machine:
      image: cimg/android:2023.02.1-node
      resource_class: large # 或根据需求选择xlarge
    steps:
      # 原有步骤...

3. 统一Fastlane的Gem环境

SSH中修改GEM_HOME能解决问题,说明CI环境默认的Gem配置可能导致依赖加载冲突。在CircleCI执行Fastlane前显式配置环境:

steps:
  # 原有依赖安装步骤...
  - run:
      name: Configure Gem Environment
      command: |
        export GEM_HOME="$HOME/.gem"
        gem install bundler
        bundle install --path vendor/bundle
  - run: bundle exec fastlane staging

4. 开启Verbose日志定位卡顿点

在Fastfile中给bundle步骤添加verbose输出,确认卡顿具体阶段:

lane :staging do
  # 其他环境配置步骤...
  sh "yarn bundle-android --verbose"
  # Gradle构建、S3上传步骤...
end

同时在CircleCI构建设置中开启详细日志,排查是否有隐藏的错误输出被吞掉。

5. 刷新依赖缓存

检查CircleCI的缓存是否导致旧依赖冲突,尝试清理缓存后重新构建:

  • 手动触发构建时勾选"Clear cache"选项
  • 或修改config.yaml中的缓存key,强制刷新:
- restore_cache:
    keys:
      - v2-android-deps-{{ checksum "package.json" }}-{{ checksum "Gemfile.lock" }}-{{ epoch }}

内容的提问来源于stack exchange,提问作者oaowren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:22:58