从gitlab安装NPM软件包不会仅在CI

时间:2018-10-19 14:28:57

标签: node.js git npm gitlab gitlab-ci

我正在使用GitLab作为我的npm软件包仓库。使用此软件包的项目使用ssh url并以特定标签为目标。消费项目package.json中的条目如下所示:"my-package": "git+ssh://git@gitlab.com:company/repo.git#tag"

现在要澄清一下,这在我的开发机上工作得很好。我可以擦除node_modulespackage-lock.json文件,清除我的npm缓存,然后成功构建并安装npm imy-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平台上运行。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我明白了

解决方案,添加此说明

- npm config set unsafe-perm true

在您之前

- npm install

  

不安全烫发

     

默认值:如果以root身份运行,则为false ,否则为true

     

类型:布尔型   设置为true以在运行程序包脚本时禁止UID / GID切换。如果显式设置为false,则以非root用户身份安装将失败。

这确实有效npm install --unsafe-perm