我正在尝试在管道中的gitlab ci作业中使用名为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 newman
gitlab.yml文件中的node -v无法识别节点,但是我可以从上面的shell文件中看到节点安装成功。
答案 0 :(得分:7)
Node,因为在安装脚本中定义的变量在那里不可用。您可以在echo $PATH
之后致电./scripts/install-nodejs.sh
自己查看。您将看到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脚本将在源代码之后结束)。