【问题标题】:Gitlab CI Failed: NPM command not foundGitlab CI 失败:未找到 NPM 命令
【发布时间】:2017-11-28 23:48:44
【问题描述】:

我一直在玩 Gitlabl CI,但由于某种原因,我无法让我的测试“通过”。它总是说npm: command not found

我的 Gitlab CI 配置如下所示:

image: node:latest
# This folder is cached between builds
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
cache:
  paths:
    - node_modules/

before_script:
  - npm install
  - npm install eslint -g
  - npm install eslint-plugin-react -g
  - npm install babel-eslint -g

test:lint:
  script:
    - eslint src/*

我不断收到以下错误,但我不知道为什么:

顺便说一句,我没有使用 gitlab 共享运行器。不确定这是否会导致问题,但只是为了确保拥有我的 gitlab 运行器的机器具有运行 nodejs 所需的所有包。

非常感谢您的帮助

最好的问候,

【问题讨论】:

  • 一个天真的问题,但是你的 gitlab 运行器上安装了 node.js 吗?
  • 你能弄清楚gitlab runner在哪个操作系统帐户下执行测试吗?之后,您可以尝试登录该帐户并验证 npm 是否可用。
  • @vsenko 是的——正如我提到的,有我的 gitlab 运行器的机器拥有运行 nodejs 的一切。这意味着我已经安装了 nodejs。谢谢f
  • @vsenko 它在 root 帐户下。在我的 runner.ssh 上,我将用户指定为 root,是的,它也安装了 nodejs。
  • 可能npm不在root用户的PATH中?

标签: javascript node.js gitlab gitlab-ci npm-install


【解决方案1】:

image 标签指定了一个 docker 镜像,因此您必须将 runner 的执行者指定为docker。您在创建跑步者时是否将其设置为其他内容,例如 shell

【讨论】:

  • 就我而言,我使用的是 ssh 而不是 docker。
【解决方案2】:

我也有同样的问题。

Gitlab-runner 启动时默认使用“gitlab-runner”用户。所以用户没有root权限。

ps aux|grep gitlab-runner

  1. 复制运行的shell

  2. 更改用户: 在 bash 中运行 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root

  3. gitlab-ci 运行器测试

  4. 通过!

  5. 杀死旧的pid

  6. nohup /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root

ps:gitlab-runner -u root也换了用户。

【讨论】:

    【解决方案3】:

    你可以像下面这样使用:-

    stages:
              - build
              - deploy
    
    deploy-prod:
              image: node:12.13.0-alpine
              stage: deploy
              script:
                - npm i -g firebase-tools
    

    【讨论】:

      【解决方案4】:

      这对我有帮助:

      n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
      

      【讨论】:

        【解决方案5】:

        您的 cli 默认使用 ssh 执行器。你可能需要码头工人。尝试在你的 yml 脚本中添加标签。

         tags: [ <your docker image name> ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-02
          • 2018-12-14
          • 2019-05-13
          • 2022-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多