diff --git a/pavelib/prereqs.py b/pavelib/prereqs.py index 764c7e9038..9612dd022e 100644 --- a/pavelib/prereqs.py +++ b/pavelib/prereqs.py @@ -15,7 +15,7 @@ from .utils.timer import timed PREREQS_STATE_DIR = os.getenv('PREREQ_CACHE_DIR', Env.REPO_ROOT / '.prereqs_cache') -NPM_REGISTRY = "http://registry.npmjs.org/" +NPM_REGISTRY = "https://registry.npmjs.org/" NO_PREREQ_MESSAGE = "NO_PREREQ_INSTALL is set, not installing prereqs" COVERAGE_REQ_FILE = 'requirements/edx/coverage.txt' diff --git a/scripts/jenkins-common.sh b/scripts/jenkins-common.sh index 375eba3a0a..9945e77d42 100644 --- a/scripts/jenkins-common.sh +++ b/scripts/jenkins-common.sh @@ -4,6 +4,11 @@ set -e source $HOME/jenkins_env +NODE_ENV_DIR=$HOME/nenv +NODE_VERSION=0.10.37 + +NODE_INSTALL_COMMAND="nodeenv --node=$NODE_VERSION --prebuilt $NODE_ENV_DIR --force" + # Clear the mongo database # Note that this prevents us from running jobs in parallel on a single worker. mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})' @@ -24,9 +29,36 @@ fi # Activate the Python virtualenv source $HOME/edx-venv/bin/activate -# add the node_js packages dir to PATH +# add the node packages dir to PATH PATH=$PATH:node_modules/.bin +echo "setting up nodeenv" +pip install nodeenv +# Ensure we are starting with a clean node env directory +rm -rf $NODE_ENV_DIR + +# Occasionally, the command to install node hangs. We need to catch that and retry. +# Note that this will retry even if the command itself fails. +WAIT_COUNT=0 +until timeout 30s $NODE_INSTALL_COMMAND || [ $WAIT_COUNT -eq 2 ]; do + echo "re-trying to install node version..." + sleep 2 + WAIT_COUNT=$((WAIT_COUNT+1)) +done + +# If we tried the max number of times, we need to quit. +if [ $WAIT_COUNT -eq 2 ]; then + echo "Node environment installation command was not successful. Exiting." + exit 1 +fi + +source $NODE_ENV_DIR/bin/activate +echo "done setting up nodeenv" +echo "node version is `node --version`" +echo "npm version is `npm --version`" + +# TODO: Provide a cached node_modules/ directory for faster/smaller installs + # Manage the npm cache on Jenkins. # (In this case, remove it. That ensures from run-to-run, it is a clean npm environment) echo "--> Cleaning npm cache"