我正在使用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密钥,我将公共密钥添加到了my-package
GitLab仓库中的“部署密钥”部分,按照这些说明https://docs.gitlab.com/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
我没有任何许可问题。消费项目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平台上运行。
有什么想法吗?
答案 0 :(得分:0)
我明白了
解决方案,添加此说明
- npm config set unsafe-perm true
在您之前
- npm install
不安全烫发
默认值:如果以root身份运行,则为false ,否则为true
类型:布尔型 设置为true以在运行程序包脚本时禁止UID / GID切换。如果显式设置为false,则以非root用户身份安装将失败。
这确实不有效npm install --unsafe-perm