node.js - 从 gitlab 安装 NPM 包不会仅在 CI 上下载所有 repo 文件
问题描述
我使用 GitLab 作为我的 npm 包存储库。使用此包的项目正在使用 ssh url 并以特定标签为目标。消费项目 package.json 中的条目如下所示:"my-package": "git+ssh://git@gitlab.com:company/repo.git#tag"
现在澄清一下,这在我的开发机器上工作得很好。我可以擦除我的node_modules
和package-lock.json
文件,清除我的 npm 缓存,然后npm i
成功my-package
构建和安装。
该项目有一个package.json
用于在安装时构建包的脚本。它看起来像这样:my-package
prepare
"scripts": {
"prepare": "npm run build",
"clean": "npx rimraf lib",
"build": "npm run clean && tsc && npx gulp"
},
my-package
位于私有仓库中,因此为了解决初始权限问题,我必须创建 ssh 密钥,按照这些说明https://docs.gitlab.commy-package
将公钥添加到部署密钥部分下的 GitLab 仓库中/ee/ssh/#deploy-keys。
消费项目中的.gitlab-ci.yml
文件将私钥包含到 ssh-agent 中,如下所示:
before_script:
- apk update
- 'which ssh-agent || ( apk update -y && apk add openssh-client -y )'
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
- ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
而且我没有权限问题。cosuming 项目 CI 的测试阶段如下所示:
test:
stage: test
script:
- apk update
- apk --no-cache add --update nodejs nodejs-npm git
- npm install
- ls node_modules/my-package/
- npm run lint
- npm run test
奇怪的是,这里npm install
没有下载和构建my-package
(就像在我的电脑上一样),它只安装 package.json 和自述文件。ls node_modeuls/my-package
上面 ci 平台上的结果是这样的:
$ ls node_modules/my-package/
package.json
readme.md
当然,由于我的包没有被下载,因此使用该包的测试无法运行。
在过去的两天里,我在这两个项目上尝试了上百万种不同的调整排列。我所做的任何事情都不能在 CI 平台上运行(但它始终在本地运行)。我真的很想知道我忽略了什么,因为这可以在我的计算机上运行,那么必须有一种方法可以在 CI 平台上运行。
有什么想法吗?
解决方案
我得到了它,
解决办法,添加这条指令
- npm config set unsafe-perm true
在你之前
- npm install
不安全烫发
默认值:如果以 root 身份运行,则为 false,否则为 true
类型:Boolean 设置为 true 以在运行包脚本时抑制 UID/GID 切换。如果显式设置为 false,则以非 root 用户身份安装将失败。
这不起作用_npm install --unsafe-perm
推荐阅读
- visual-studio - epan 目录中缺少 libwireshark.def
- akka - 具有持久邮箱的 Akka 无状态演员
- c# - 良好的软件设计模式,单元测试的构造函数重载
- javascript - 如何通过查询数据库来更新图表?
- javascript - 如何拆分长的 GraphQL 模式
- android - Android 9:webview 中不允许明文 HTTP 流量
- python - pyqt5:启动应用程序时出现 qt.qpa.xcb 错误
- linux - 使用最后一个字段对文本文件进行排序
- logging - 用于在 Logstash 中解析的奇怪日志结构。意见赞赏
- css - 使用 CSS Grid 每行不同的列集