Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node and npm not getting recognized after getting installed from shell script in gitlab ci

I am trying to install nodejs using a shell script file named install-nodejs.sh in gitlab ci job in pipeline. Installation is successful and node displays the version while within install-nodejs.sh file but when I say node -v in gitlab-ci.yml file it doesn't recognize node command, what am I doing wrong?

I am created a shell script to install nodejs and set export path but still node is not getting recognized

install-nodejs.sh file code

#!/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

and gitlab.yml file code where i am calling this file

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

node -v in gitlab.yml file is not recognizing node but I can see the node installation is successful from shell file above.

like image 332
zash707 Avatar asked Jun 12 '19 06:06

zash707


Video Answer


1 Answers

Node is not found in the gitlab.yml file because the variables that you have defined in your install script are not available there. You can see that by yourself by calling echo $PATH just after ./scripts/install-nodejs.sh. You will see that PATH does not contain $NVM_INSTALL_PATH/bin.

The reason is that export is exporting the variables to the child process, not the parent. See Bash: export not passing variables correctly to parent.

You can make them available in the gitlab.yml file by using source:

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

Note that I am assuming that install-nodejs.sh is exactly the one you have shown and does not end with exit (otherwise the yml script will end just after source).

like image 144
piarston Avatar answered Oct 07 '22 12:10

piarston