Вот мои шаги в моем
steps:
-run:
name: Setup nvm and npm
command: |
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
export NVM_DIR=$HOME/.nvm
source $NVM_DIR/nvm.sh
nvm install 8.9 && nvm alias default 8.9
-run: npm install && npm run lint && npm test
Второй шаг всегда терпит неудачу с этим сообщением об ошибке
/bin/bash: npm: command not found
Я проверил .bashrc
и вижу, что в конец файла добавлены следующие строки
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
Circleci 2.0 вызывает команду step, запустив новую оболочку с #!/bin/bash -eo pipefail
Если я запускаю докер (docker run -i -t buildpack-deps:xenial
) и применяю первый шаг, а затем запускаю новую оболочку через #!/bin/bash -eo pipefail
, я вижу, что npm
доступен на пути
Я использую докер для этого проекта
version: 2
jobs:
test_main:
docker:
- image: buildpack-deps:xenial
Так почему же это не работает в среде circleci 2.0? Как я могу гарантировать, что npm
будет доступен для шага 2 с шага 1?
Я попытался добавить [ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"
в ~/.bash_profile
(в случае, если .bashrc
не выполняется из-за неинтерактивной оболочки или оболочки без входа в систему)
Чтобы воспроизвести проблему, вы можете запустить circleci build
с этим .circleci/config.yml
файлом.
version: 2
jobs:
build:
docker:
- image: buildpack-deps:xenial
steps:
- run:
name: Setup nvm and npm
command: |
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
# Activate nvm
export NVM_DIR=$HOME/.nvm
touch $HOME/.nvmrc
source $NVM_DIR/nvm.sh
# Use node 8.9
nvm install 8.9 && nvm alias default 8.9
echo 8.9 > $HOME/.nvmrc
# Enable nvm in following steps
echo '[ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"' >> $HOME/.bash_profile
# To fix npm install : "node-pre-gyp: Permission denied"
npm config set user 0
npm config set unsafe-perm true
npm install -g npx webpack webpack-cli jest
node --version
npm --version
- run: npm install
Вы увидите следующее сообщение об ошибке:
====>> npm install
#!/bin/bash -eo pipefail
npm install
/bin/bash: npm: command not found
Error: Exited with code 127
Step failed
Task failed