首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在循环2.0中逐步启用nvm?

如何在循环2.0中逐步启用nvm?
EN

Stack Overflow用户
提问于 2018-03-12 10:16:28
回答 3查看 3K关注 0票数 4

这是我的脚步声

代码语言:javascript
复制
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

对于此错误消息,第二步总是失败。

代码语言:javascript
复制
/bin/bash: npm: command not found

我检查了.bashrc,可以看到下面的行被添加到文件的末尾

代码语言:javascript
复制
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

Circleci2.0通过使用#!/bin/bash -eo pipefail启动一个新的shell来调用step命令

如果我启动一个码头(docker run -i -t buildpack-deps:xenial)并应用第一步,然后通过#!/bin/bash -eo pipefail启动一个新的shell,我可以看到路径上有npm可用。

我要用码头来做这个项目

代码语言:javascript
复制
version: 2
jobs:
  test_main:
    docker:
      - image: buildpack-deps:xenial

那么,为什么它在循环2.0环境中失败呢?如何确保npm可用于步骤1中的步骤2?

我尝试将[ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"添加到~/.bash_profile中(万一.bashrc由于非交互式/非登录shell而没有执行)

要重现这个问题,可以使用这个circleci build文件运行.circleci/config.yml

代码语言:javascript
复制
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

您将看到以下错误消息:

代码语言:javascript
复制
====>> npm install
  #!/bin/bash -eo pipefail
npm install
/bin/bash: npm: command not found
Error: Exited with code 127
Step failed
Task failed
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-13 00:59:06

问题就在于这几条线:

代码语言:javascript
复制
        # Enable nvm in following steps
        echo '[ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"' >> $HOME/.bash_profile

我希望能从.bash_profile那里获得.bash_profile的信息。然而,由于循环的外壳是非交互的,环境变量PS1是空白的.因此,.bashrc基本上在获得资源后立即退出,因为.bashrc中的这一行

代码语言:javascript
复制
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

我必须将以下行直接放在$BASH_ENV指定的文件中

代码语言:javascript
复制
echo 'export NVM_DIR=$HOME/.nvm' >> $BASH_ENV
echo 'source $NVM_DIR/nvm.sh' >> $BASH_ENV
票数 9
EN

Stack Overflow用户

发布于 2020-05-15 16:03:37

我发现nvm更改默认节点并不适用于我的步骤。

通过下列方式解决:

代码语言:javascript
复制
      - run:
          name: 'Install Project Node'
          command: |
            set +x
            source ~/.bashrc

            nvm install 12
            NODE_DIR=$(dirname $(which node))
            echo "export PATH=$NODE_DIR:\$PATH" >> $BASH_ENV
票数 1
EN

Stack Overflow用户

发布于 2020-01-05 19:25:37

只是source /opt/circleci/.nvm/nvm.sh在每一步的开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49232758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档