IBM Cloud Code Risk Analyzer拦截未发布代码及GitHub依赖安装报错
问题场景
在IBM Cloud中部署Node-RED实例用于代码正式发布前的新增、更新功能测试时,工具链流水线内置的Code Risk Analyzer会拦截所有未正式发布的代码,导致测试代码无法正常运行。
所有从GitHub源(而非NPM官方源)加载依赖的操作,都会触发如下构建报错:
npm ERR! enoent undefined ls-remote -h -t https://github.com/watson-developer-cloud/node-red-node-watson.git npm ERR! enoent npm ERR! enoent npm ERR! enoent spawn git ENOENT npm ERR! enoent This is related to npm not being able to find a file. npm ERR! enoent npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2022-06-17T07_53_14_536Z-debug.log The command '/bin/sh -c npm install --no-audit --no-update-notifier --no-fund --production' returned a non-zero code: 254 Error running docker build: unable to build Docker image FAILED
复现规则
仅通过Web IDE修改package.json文件触发工具链自动重建时,两种依赖配置的构建结果完全不同:
- 依赖配置为NPM官方发布版本时,构建可正常完成,对应配置项:
"node-red-node-watson": "0.10.3",
- 依赖配置为GitHub仓库地址时,构建直接失败,对应配置项:
"node-red-node-watson": "https://github.com/watson-developer-cloud/node-red-node-watson.git#master",
故障根因
- 构建环节使用的基础Docker镜像默认未预装Git客户端,npm拉取Git协议的仓库依赖时需要调用本地git命令,找不到对应可执行文件就会抛出
spawn git ENOENT错误 - Code Risk Analyzer默认安全策略会拦截所有非NPM官方源的未正式发布版本依赖,即便补装Git完成依赖拉取,也会被安全校验环节拦截阻断构建流程
解决方法
- 补全构建依赖:修改流水线使用的Dockerfile,在执行
npm install的步骤前增加Git安装命令:Debian/Ubuntu系基础镜像添加RUN apt-get update && apt-get install -y --no-install-recommends git;Alpine系基础镜像添加RUN apk add --no-cache git - 调整测试阶段安全规则:进入工具链流水线配置页,找到Code Risk Analyzer任务项,添加临时例外规则,允许测试用的GitHub来源依赖通过扫描,或者在测试周期内临时关闭未发布版本的拦截校验,代码正式发布切回NPM官方源后恢复原有安全规则即可
- 绕过校验的替代方案:不需要修改默认安全规则的前提下,可先将GitHub上的待测试依赖代码打包成tgz格式压缩包,上传到项目私有目录或者团队私有NPM源,在
package.json中通过本地文件路径或者私有源地址引用依赖,既不需要拉取Git仓库,也不会触发非官方源的拦截逻辑
内容的提问来源于stack exchange,提问作者chughts
相关产品推荐
相关产品推荐

