diff --git a/tools/jenkins/build_docker_and_run_tests.sh b/tools/jenkins/build_docker_and_run_tests.sh
index 6e3166ce5799cece3cf8862c0787416d862b34ba..5bb2b6b18860037262d67efa1513f7564e9685ba 100755
--- a/tools/jenkins/build_docker_and_run_tests.sh
+++ b/tools/jenkins/build_docker_and_run_tests.sh
@@ -66,6 +66,7 @@ docker run \
   -i $TTY_FLAG \
   -v "$git_root:/var/local/jenkins/grpc" \
   -v /tmp/ccache:/tmp/ccache \
+  -v /tmp/npm-cache:/tmp/npm-cache \
   -v /tmp/xdg-cache-home:/tmp/xdg-cache-home \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -v $(which docker):/bin/docker \
diff --git a/tools/jenkins/grpc_jenkins_slave/Dockerfile b/tools/jenkins/grpc_jenkins_slave/Dockerfile
index 129a8db24fafd5f86fb99b5f5e2e71c4616b362f..5b8c24c076ca217204a539a5109f4f24151b8b66 100644
--- a/tools/jenkins/grpc_jenkins_slave/Dockerfile
+++ b/tools/jenkins/grpc_jenkins_slave/Dockerfile
@@ -101,7 +101,7 @@ ENV NUGET mono /var/local/NuGet.exe
 # Install nvm
 RUN touch .profile
 RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash
-RUN /bin/bash -l -c "nvm install 0.12"
+RUN /bin/bash -l -c "nvm install 0.12 && npm config set cache /tmp/npm-cache"
 
 ##################
 # Ruby dependencies
diff --git a/tools/jenkins/grpc_jenkins_slave_32bits/Dockerfile b/tools/jenkins/grpc_jenkins_slave_32bits/Dockerfile
index 81a039909160acc66f9a3222caf9011c7a2a9112..7179a50cc5993fd063c59e8805659e0c496e58d8 100644
--- a/tools/jenkins/grpc_jenkins_slave_32bits/Dockerfile
+++ b/tools/jenkins/grpc_jenkins_slave_32bits/Dockerfile
@@ -101,7 +101,7 @@ ENV NUGET mono /var/local/NuGet.exe
 # Install nvm
 RUN touch .profile
 RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash
-RUN /bin/bash -l -c "nvm install 0.12"
+RUN /bin/bash -l -c "nvm install 0.12 && npm config set cache /tmp/npm-cache"
 
 ##################
 # Ruby dependencies
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index ce1e0887f2d68fde84b0aa6d7d41f5d56229af0f..ceeee7392127171cbf5613843a1a065ffdc4866a 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -192,7 +192,8 @@ class NodeLanguage(object):
                             environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
 
   def pre_build_steps(self):
-    return []
+    # Default to 1 week cache expiration
+    return [['npm', 'update', '--cache-min', '604800']]
 
   def make_targets(self):
     return []