首页 > 解决方案 > CircleCI忘记机器执行器上的节点版本

问题描述

我将节点版本设置为10.15.1withnvm并在下一步中run恢复为6.1.0. 我尝试了几种变体,包括这个:https ://www.cloudesire.com/how-to-upgrade-node-on-circleci-machine-executor/

我错过了一些明显的东西吗?我只需要每run一步都记住我在第一步中设置的节点版本,以便10.15.1在这种情况下它们都将使用。

这是我工作流程中的工作:

dev:
  environment:
    BASH_ENV: run/env/test/.env
  machine:
    image: circleci/classic:latest
  steps:
  - checkout
  - run:
      name: Install node@10
      command: |
        set +e

        curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
        export NVM_DIR="/opt/circleci/.nvm"
        [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

        nvm install 10
        nvm alias default 10

        rm -rf ~./node-gyp

        node -v # prints 10.15.1 as expected

  - run:
      name: Install yarn and rsync
      command: |
        node -v # prints 6.1.0

        export NVM_DIR="/opt/circleci/.nvm"
        [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

        node -v # prints 6.1.0

        curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
        echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
        sudo apt-get update && sudo apt-get install yarn rsync

  - run:
      name: Install node modules
      command: |
        node -v # prints 6.1.0

        yarn install # this is what is failing because of the unexpected node version

  - run:
      name: Deploy to Dev Server
      command: |
        if [ "${CIRCLE_BRANCH}" == "master" ]; then rsync -arhvz --exclude .git/ -e "ssh -o StrictHostKeyChecking=no" --progress \
        ./ ubuntu@xxx.xxx.xxx.xxx:/var/www/xxx/xxx/; fi
        if [ "${CIRCLE_BRANCH}" == "master" ]; then ssh -o StrictHostKeyChecking=no ubuntu@xxx.xxx.xxx.xxx 'cd /var/www/xxx/xxx && pm2 restart all --update-env'; fi

标签: node.jscirclecinvm

解决方案


尽管 FelicianoTech 是正确的,但在您预先安装了 nvm 的机器执行程序中,它不会记住下一个运行命令中的实际状态。为了让 nvm 记住它的状态,你必须将它存储在$BASH_ENV. 经过数小时的搜索,我终于在 CircleCI Disussion Board 中找到了答案

machine: 
      image: circleci/classic:latest
steps:
      - checkout
      - run: 
          command: |
            echo 'export NVM_DIR="/opt/circleci/.nvm"' >> $BASH_ENV
            echo ' [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV
      - run: nvm install 10
      - run: node -v
      - run: npm -v
      - run: npm i -g npm@6.9.0
      - run: npm -v
      - run: nvm alias default 10
      - run: nvm use 10
      - run: node -v
      - run: npm -v

然后,只有那时,我也取得了成功,即使最后一个运行命令- run: node -v仍然正确地记住节点版本。

CircleCI 上的输出

在此处输入图像描述

(在讨论板上向 phil-lgr 致谢)


推荐阅读