node.js - 从 gitlab 安装 NPM 包不会仅在 CI 上下载所有 repo 文件

标签 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-包成功构建和安装。

my-package 项目的 package.json 有一个 prepare 脚本,用于在安装时构建包。它看起来像这样:

"scripts": {
    "prepare": "npm run build",
    "clean": "npx rimraf lib",
    "build": "npm run clean && tsc && npx gulp"
  },

my-package 在私有(private)仓库中,所以为了解决初始权限问题,我必须创建 ssh key ,我将公钥添加到 my-package Deploy Keys 部分下的 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

而且我没有权限问题。 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(就像在我的电脑上那样),它只会安装包。 json 和自述文件。上述 ci 平台上 ls node_modeuls/my-package 的结果是这样的:

$ ls node_modules/my-package/
package.json
readme.md

当然,由于我的包没有被下载,所以使用该包的测试无法运行。

在过去的 2 天里,我对这两个项目尝试了一百万种不同的调整排列。我做的任何事情都不能在 CI 平台上运行(但它始终在本地运行🧐)。我真的很想知道我忽略了什么,因为它可以在我的电脑上运行,所以必须有一种方法可以让它在 CI 平台上运行。

有什么想法吗?

最佳答案

我知道了,

解决方法,添加这条指令

- npm config set unsafe-perm true

在你之前

- npm 安装

unsafe-perm

Default: false if running as root, true otherwise

Type: Boolean Set to true to suppress the UID/GID switching when running package scripts. If set explicitly to false, then installing as a non-root user will fail.

有效 npm install --unsafe-perm

关于node.js - 从 gitlab 安装 NPM 包不会仅在 CI 上下载所有 repo 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894449/

相关文章:

javascript - 是否可以使用快速路线正则表达式中的捕获组?

node.js - 解析请求正文中的 UTF8 字符时出现问题?

javascript - Node 模块可以相互要求吗

Git 在两个文件夹之间 merge ,而不是分支

Git:使用 EGit 重命名文件会导致删除文件历史记录

javascript - 从那时起返回另一个 promise 的 promise

PHP Composer 与 Git 子模块和 Symfony2 混合

返回未定义的 JavaScript 对象

node.js - 为预安装运行的 npm 脚本,但不为预更新运行

node.js - 在 npm 脚本中使用 rm -rfolder_name/* 删除文件夹的内容会出现 'no such folder or directory' 错误