首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从gitlab ci中的shell脚本安装后,无法识别节点和npm

从gitlab ci中的shell脚本安装后,无法识别节点和npm
EN

Stack Overflow用户
提问于 2019-06-12 14:52:36
回答 1查看 374关注 0票数 5

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

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

install-nodejs.sh文件代码

代码语言:javascript
复制
#!/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文件代码

代码语言:javascript
复制
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无法识别节点,但我可以从上面的gitlab.yml文件中看到节点安装成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 16:11:59

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

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

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

代码语言:javascript
复制
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脚本将在源代码之后结束)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56556215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档