从GitLab安装NPM包不会仅下载配置项上的所有repo文件 [英] Installing NPM package from gitlab doesn't download all repo files only on CI
问题描述
我使用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
成功生成和安装。
my-package
项目的package.json
具有用于在安装时构建软件包的prepare
脚本。看起来是这样的:
"scripts": {
"prepare": "npm run build",
"clean": "npx rimraf lib",
"build": "npm run clean && tsc && npx gulp"
},
my-package
位于私有存储库中,因此要解决初始权限问题,我必须创建ssh密钥,按照这些说明https://docs.gitlab.com/ee/ssh/#deploy-keys将公钥添加到部署密钥部分下的my-package
GitLab存储库。
消费项目中的.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
并且我没有权限问题。商业项目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和自述文件。以上在ci平台上的ls node_modeuls/my-package
结果如下:
$ ls node_modules/my-package/
package.json
readme.md
当然,因为没有下载我的软件包,所以使用该软件包的测试无法运行。
在过去的两天里,我在这两个项目上尝试了一百万种不同的调整。而且我做的任何事情都不能在CI平台上工作(但它始终在本地工作,🧐)。我真的很想知道我忽略了什么,因为既然这在我的计算机上工作,那么就必须有一种方法让它在CI平台上工作。
有什么想法吗?
推荐答案
我知道了,
解决方案,添加此说明
- npm config set unsafe-perm true
在您之前
- npm install
不安全烫发
默认值:如果以root身份运行false,否则为true
类型:布尔型 设置为true可在运行程序包脚本时禁止UID/GID切换。如果显式设置为false,则以非root用户身份安装将失败。
此操作未起作用npm install --unsafe-perm
这篇关于从GitLab安装NPM包不会仅下载配置项上的所有repo文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!