Node и npm не распознаются после установки из сценария оболочки в gitlab ci - PullRequest
5 голосов
/ 12 июня 2019

Я пытаюсь установить nodejs с помощью файла сценария оболочки с именем install-nodejs.sh в задании gitlab ci в конвейере. Установка прошла успешно, и узел отображает версию, находясь в файле install-nodejs.sh, но когда я говорю узел -v в файле gitlab-ci.yml, он не распознает команду узла, что я делаю неправильно?

Я создал сценарий оболочки для установки 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

узел -v в файле gitlab.yml не распознает узел, но я вижу, что установка узла прошла успешно из файла оболочки выше.

1 Ответ

7 голосов
/ 19 июня 2019

Узел не найден в файле gitlab.yml, потому что переменные, которые вы определили в вашем скрипте установки, там не доступны. Вы можете убедиться в этом сами, позвонив echo $PATH сразу после ./scripts/install-nodejs.sh. Вы увидите, что PATH не содержит $NVM_INSTALL_PATH/bin.

Причина в том, что export экспортирует переменные в дочерний процесс, а не в родительский. См. Bash: экспорт неправильно передаваемых переменных в родительский .

Вы можете сделать их доступными в файле gitlab.yml, используя source:

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 завершится сразу после исходного кода).

...