【问题标题】:Cloud Build failing to npm install a NodeJS projectCloud Build 无法 npm 安装 NodeJS 项目
【发布时间】:2021-01-21 19:50:34
【问题描述】:

我正在我的cloudbuild.yaml 文件中运行以下命令:

  - name: "gcr.io/cloud-builders/npm"
    args: ["install"]

此命令在 7 月 30 日正确运行,但从 10 月 5 日起,我收到此响应,然后是 make 输出流,直到命令失败:

Already have image (with digest): gcr.io/cloud-builders/npm

> grpc@1.24.1 install /workspace/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library

node-pre-gyp WARN Using request for node-pre-gyp https download 
node-pre-gyp WARN Tried to download(404): https://node-precompiled-binaries.grpc.io/grpc/v1.24.1/node-v83-linux-x64-glibc.tar.gz 
node-pre-gyp WARN Pre-built binaries not found for grpc@1.24.1 and node@14.10.0 (node-v83 ABI, glibc) (falling back to source compile with node-gyp) 

即使我从之前成功的 git 提交中重建,我也会收到此响应

我认为这可能是由于 Cloud Build 尝试根据最近成功构建的输出将我的 NodeJS 项目构建为与以前不同的版本:

Already have image (with digest): gcr.io/cloud-builders/npm

> grpc@1.24.1 install /workspace/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library

node-pre-gyp WARN Using request for node-pre-gyp https download 
[grpc] Success: "/workspace/node_modules/grpc/src/node/extension_binary/node-v57-linux-x64-glibc/grpc_node.node" is installed via remote

我在package.json 中添加了以下行,试图将我的NodeJS 版本设置为v57 (6.13.4),但没有任何效果:

  "engines" : { "node" : "6.13.4" },

任何帮助将不胜感激。最好如何防止我的构建版本发生变化,因为这种意外的变化花费了我更多的时间而不是应该有的时间

谢谢!

【问题讨论】:

    标签: node.js npm google-cloud-platform npm-install google-cloud-build


    【解决方案1】:

    节点版本出错,check the available versions here

    设置版本,示例:

      - name: "gcr.io/cloud-builders/npm:node-12.18.3"
        args: ["install"]
    

    【讨论】:

      【解决方案2】:

      这似乎是一个已知问题。

      第一个解决方案可以将nodejs版本降级到10.18.0。

      the second solution

      迟到但必须使用needle下载的人:

      node-pre-gyp WARN Using needle for node-pre-gyp https download
      

      可以通过先安装请求来解决这个问题:

      npm install request
      

      然后,照常安装 grpc:

      npm install grpc
      

      这是因为node-pre-gyp在安装过程中有如下代码sn-p:

      try {
        http_get.impl = require('request');
        http_get.type = 'request';
        log.warn("Using request for node-pre-gyp https download");
      } catch (e) {
        http_get.impl = require('needle');
        http_get.type = 'needle';
        log.warn("Using needle for node-pre-gyp https download");
      }
      

      所以没有使用请求,因为任何 package.json 都没有请求。 预安装请求为我解决了这个问题。 重要的是必须从任何 npm 配置中删除所有 cafile 选项 ssl 可以再次设置为 true,也可以将 NODE_TLS_REJECT_UNAUTHORIZED 设置为 true。

      【讨论】:

        猜你喜欢
        • 2021-12-15
        • 2017-12-07
        • 2019-05-27
        • 2016-08-14
        • 2020-09-17
        • 1970-01-01
        • 2023-01-01
        • 2020-10-21
        • 1970-01-01
        相关资源
        最近更新 更多