【问题标题】:Node and npm not getting recognized after getting installed from shell script in gitlab ci从 gitlab ci 中的 shell 脚本安装后,节点和 npm 无法识别
【发布时间】:2019-10-26 14:45:04
【问题描述】:

我正在尝试在管道中的 gitlab ci 作业中使用名为 install-nodejs.sh 的 shell 脚本文件安装 nodejs。安装成功,节点在 install-nodejs.sh 文件中显示版本,但是当我在 gitlab-ci.yml 文件中说 node -v 时它无法识别节点命令,我做错了什么?

我创建了一个 shell 脚本来安装 nodejs 并设置导出路径,但仍然无法识别节点

install-nodejs.sh 文件代码

#!/usr/bin/env bash
set -e

command -v node > /dev/null | NOT_INSTALLED=1
if [[ "$NOT_INSTALLED" != "1" ]]
then  
  mkdir /usr/local/nvm
  NVM_DIR="/usr/local/nvm"
  NODE_VERSION="10.12.0"
  NVM_INSTALL_PATH="$NVM_DIR/versions/node/v$NODE_VERSION"
  rm /bin/sh && ln -s /bin/bash /bin/sh
  curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
  source ~/.nvm/nvm.sh
  nvm install $NODE_VERSION
  nvm alias default $NODE_VERSION
  nvm use default
  export NODE_PATH="$NVM_INSTALL_PATH/lib/node_modules"
  export PATH="$NVM_INSTALL_PATH/bin:$PATH"
fi

和我调用这个文件的 gitlab.yml 文件代码

test_install_nodejs:
  <<: *default_job_template
  stage: build
  script:
    - ./scripts/install-nodejs.sh
    - node -v
    - npm -v
    - npm install -g newman

gitlab.yml 文件中的node -v 无法识别节点,但我可以从上面的shell 文件中看到节点安装成功。

【问题讨论】:

    标签: linux shell docker gitlab-ci


    【解决方案1】:

    在 gitlab.yml 文件中找不到节点,因为您在安装脚本中定义的变量在那里不可用。您可以通过在./scripts/install-nodejs.sh 之后调用echo $PATH 自己查看。您会看到 PATH 不包含 $NVM_INSTALL_PATH/bin

    原因是export 正在将变量导出到子进程,而不是父进程。见Bash: export not passing variables correctly to parent

    您可以使用source 使它们在 gitlab.yml 文件中可用:

    test_install_nodejs:
      <<: *default_job_template
      stage: build
      script:
        - source ./scripts/install-nodejs.sh
        - node -v
        - npm -v
        - npm install -g newman
    

    请注意,我假设 install-nodejs.sh 正是您显示的那个并且不以 exit 结尾(否则 yml 脚本将在 source 之后结束)。

    【讨论】:

    • 它有效,我缺少源关键字。谢谢@piarston
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2020-10-13
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多