Cloud Build 无法 npm 安装 NodeJS 项目

Cloud Build failing to npm install a NodeJS project

我 运行 我的 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" },

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

谢谢!

这似乎是一个已知问题。

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

the second solution

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

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

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

npm install request

然后,照常安装grpc:

npm install grpc

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

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.

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

设置版本,例如:

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