5

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.

1 Answer 1

7
+50

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).

Sign up to request clarification or add additional context in comments.

1 Comment

It worked, I was missing source keyword. Thanks @piarston

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.