我正在尝试使用gitlab ci作业中的shell脚本文件install-nodejs.sh来安装nodejs。安装成功了,node在install-nodejs.sh文件中显示了版本,但是当我在gitlab-ci.yml文件中说node -v时,它不能识别node命令,我做错了什么?
我创建了一个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 newmangitlab.yml文件中的node -v无法识别节点,但我可以从上面的gitlab.yml文件中看到节点安装成功。
发布于 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文件中可用
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脚本将在源代码之后结束)。
https://stackoverflow.com/questions/56556215
复制相似问题