在我们的一个 Node.js 项目中,
package.json
文件中有以下依赖项:
"cordova-plugin-mobile-ocr": "git+https://bitbucket.org/bhivedevs/cordova-plugin-mobile-ocr.git"
出于某种原因,一旦我运行
npm i
,结果在package-lock.json
中如下:
"resolved": "git+ssh://[email protected]/bhivedevs/cordova-plugin-mobile-ocr.git#9f627f0d36dbb8ee544fb9b2174f6f127c878e3c"
然而,CI/CD 构建机器位于公司防火墙后面,该防火墙会阻止所有非 HTTP 连接,因此
npm i
的运行最终会失败并出现以下错误:
npm ERR! code 128
npm ERR! A git connection error occurred
npm ERR! command git --no-replace-objects ls-remote ssh://[email protected]/bhivedevs/cordova-plugin-mobile-ocr.git
npm ERR! ssh: connect to host bitbucket.org port 22: Operation timed out
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
我对 NPM 或那个项目不太熟悉;我只是一名 DevOps 人员,负责让 CI/CD 流程发挥作用。 无法为传出 SSH 连接打开防火墙。那么我有什么选择呢?
为什么依赖项的 URL 从“git+https://”更改为“git+ssh://”?有没有办法防止这种情况发生?
您还可以通过运行以下命令将 Git 配置为始终对 Bitbucket 使用 HTTPS 而不是 SSH:
git config --global url."bitbucket.org/".insteadOf "ssh://[email protected]/"
这将强制 Git 在拉取依赖项时使用 HTTPS,避免 SSH 连接被防火墙阻止。