yarn 构建 - 错误命令失败,退出代码 137 - Bitbucket 管道内存不足 - 使用最大内存 8192mb

问题描述 投票:0回答:3

我们的 React 应用程序配置为使用 CRA 脚本和 Bitbucket 管道构建和部署。

我们的大多数构建都无法运行

yarn build
并出现以下错误:

error Command failed with exit code 137.

这是一个内存不足的错误。

我们尝试将 GENERATE_SOURCEMAP=false 设置为部署环境变量,但这并没有解决问题https://create-react-app.dev/docs/advanced-configuration/.

我们还尝试通过运行以下命令为一个步骤设置可用的最大内存:

node --max-old-space-size=8192 scripts/build.js

增加到最大内存并没有解决问题。

这阻碍了我们的发展,我们不确定如何解决这个问题。

我们可以转向新的 CI/CD 服务,但这比预期的要多得多。

还有其他解决方案可以解决这个问题吗?

下面是

bitbucket-pipelines.yml
文件

image: node:14

definitions:
  steps:
    - step: &test
        name: Test
        script:
          - yarn
          - yarn test --detectOpenHandles --forceExit --changedSince $BITBUCKET_BRANCH
    - step: &build
        name: Build
        size: 2x
        script:
          - yarn
          - NODE_ENV=${BUILD_ENV} yarn build
        artifacts:
            - build/**
    - step: &deploy_s3
        name: Deploy to S3
        script:
          - pipe: atlassian/aws-s3-deploy:0.3.8
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
              S3_BUCKET: $S3_BUCKET
              LOCAL_PATH: "./build/"
              ACL: 'public-read'
    - step: &auto_merge_down
        name: Auto Merge Down
        script:
          - ./autoMerge.sh stage || true
          - ./autoMerge.sh dev || true
  caches:
    jest: /tmp/jest_*
    node-dev: ./node_modules
    node-stage: ./node_modules
    node-release: ./node_modules
    node-prod: ./node_modules


pipelines:
  branches:
    dev:
      - parallel:
          fail-fast: true
          steps:
            - step:
                caches:
                  - node-dev
                  - jest
                <<: *test
            - step:
                caches:
                  - node-dev
                <<: *build
                deployment: Dev Env
      - step:
          <<: *deploy_s3
          deployment: Dev
    stage:
      - parallel:
          fail-fast: true
          steps:
            - step:
                caches:
                  - node-stage
                  - jest
                <<: *test
            - step:
                caches:
                  - node-stage
                <<: *build
                deployment: Staging Env
      - step:
          <<: *deploy_s3
          deployment: Staging
    prod:
      - parallel:
          fail-fast: true
          steps:
            - step:
                caches:
                  - node-prod
                  - jest
                <<: *test
            - step:
                caches:
                  - node-prod
                <<: *build
                deployment: Production Env
      - parallel:
          steps:
            - step:
                <<: *deploy_s3
                deployment: Production
            - step:
                <<: *auto_merge_down
node.js reactjs yarnpkg bitbucket-pipelines
3个回答
1
投票

事实证明,在我们的

terser-webpack-plugin
步骤中,
yarn build
包正在运行 max workers for jest workers,导致内存不足错误https://www.npmjs.com/package/terser-webpack-plugin

通过从我们的

package.json
中删除该插件,它不再使构建失败,并且在构建过程中不再产生笑话工人。

您还可以在 TerserWebpackPlugin 的配置中将 paralell 设置为 false 以不产生工人。

这似乎不正确,导致我们的管道和其他人内存不足。


0
投票

您可以使用带有

size: 4x
size: 8x
的更大的构建器,但只能与您的自托管管道运行器一起使用,这显然至少需要 16GB

https://support.atlassian.com/bitbucket-cloud/docs/step-options/#Size

definitions:
  anchors:

    - &build-step
        name: Build
        size: 4x
        runs-on: 
          - 'self.hosted'
          - 'my.custom.label'
        script:
          - yarn
          - NODE_ENV=${BUILD_ENV} yarn build
        artifacts:
            - build/**

-1
投票

尝试添加以下定义:

definitions:
  services:
    docker:
      memory: 4096

当我们遇到一些类似的问题时发现它:https://confluence.atlassian.com/bbkb/bitbucket-pipeline-execution-hangs-on-docker-build-step-1189503836.html

编辑: 对不起我的错,不,你不需要码头工人。请注意,分配的内存由步骤中的脚本和步骤中的任何服务共享,因此可能会删除并行并让 jest 在开始构建之前自行运行它可能会占用一些内存。如果您确实必须并行运行,至少通过按顺序运行测试 jest --runInBand 或通过较少数量的工人 jest --maxWorkers=4

来限制 jest 的影响
© www.soinside.com 2019 - 2024. All rights reserved.