diff --git a/.gitignore b/.gitignore
index 8dc459ea276b108504c8909ffda23319fe5acaa9..18b42811b280f41afda7aaf51de05f0cd219e1c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ objs
 python*_virtual_environment
 
 # gcov coverage data
+reports
 coverage
 *.gcno
 
diff --git a/tools/jenkins/build_docker_and_run_tests.sh b/tools/jenkins/build_docker_and_run_tests.sh
index 9f97f39e75d6f99c8955e9881788a03e575b7871..2c562e992aa4771da617336254b037096d065769 100755
--- a/tools/jenkins/build_docker_and_run_tests.sh
+++ b/tools/jenkins/build_docker_and_run_tests.sh
@@ -74,6 +74,10 @@ then
   docker cp "$DOCKER_CID:/var/local/git/grpc/$XML_REPORT" $git_root
 fi
 
+docker cp "$DOCKER_CID:/var/local/git/grpc/reports.zip" $git_root || true
+unzip $git_root/reports.zip -d $git_root || true
+rm -f reports.zip
+
 # remove the container, possibly killing it first
 docker rm -f $DOCKER_CID || true
 
diff --git a/tools/jenkins/docker_run_tests.sh b/tools/jenkins/docker_run_tests.sh
index 3595a95f5ced43f3a1789310db858f16de669754..2e39bc6f51e2a4ef208342c004dad339fae66ea7 100755
--- a/tools/jenkins/docker_run_tests.sh
+++ b/tools/jenkins/docker_run_tests.sh
@@ -42,4 +42,18 @@ git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc
 nvm use 0.12
 rvm use ruby-2.1
 
+mkdir -p reports
+
 $RUN_TESTS_COMMAND
+
+cd reports
+echo '<html><head></head><body>' > index.html
+find . -maxdepth 1 -mindepth 1 -type d | sort | while read d ; do
+  d=${d#*/}
+  n=${d//_/ }
+  echo "<a href='$d/index.html'>$n</a><br />" >> index.html
+done
+echo '</body></html>' >> index.html
+cd ..
+
+zip -r reports.zip reports
diff --git a/tools/run_tests/run_node.sh b/tools/run_tests/run_node.sh
index 1043b447db38a3c92c573ff8f8a770a29fe488cc..e322ab1995a40c711af632dd6348ee1343917dec 100755
--- a/tools/run_tests/run_node.sh
+++ b/tools/run_tests/run_node.sh
@@ -43,13 +43,13 @@ export LD_LIBRARY_PATH=$root/libs/$CONFIG
 
 if [ "$CONFIG" = "gcov" ]
 then
-  ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- \
-    --timeout 8000
+  ./node_modules/.bin/istanbul cover --dir ../../reports/node_coverage \
+    ./node_modules/.bin/_mocha -- --timeout 8000
   cd build
   gcov Release/obj.target/grpc/ext/*.o
   lcov --base-directory . --directory . -c -o coverage.info
-  genhtml -o ../ext_coverage --num-spaces 2 -t 'Node gRPC test coverage' \
-    coverage.info
+  genhtml -o ../../../reports/node_ext_coverage --num-spaces 2 \
+    -t 'Node gRPC test coverage' coverage.info
 else
   ./node_modules/mocha/bin/mocha --timeout 8000
 fi