diff --git a/tools/internal_ci/helper_scripts/gen_report_index.sh b/tools/internal_ci/helper_scripts/gen_report_index.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0af89c331cd08671ba9e4d4cbd71792863ef57a2
--- /dev/null
+++ b/tools/internal_ci/helper_scripts/gen_report_index.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Copyright 2017 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Generates index.html that will contain links to various test results on kokoro.
+set -e
+
+# change to grpc repo root
+cd $(dirname $0)/../../..
+
+# Kororo URLs are in the form "grpc/job/macos/job/master/job/grpc_build_artifacts"
+KOKORO_JOB_PATH=$(echo "${KOKORO_JOB_NAME}" | sed "s|/|/job/|g")
+
+mkdir -p reports
+
+echo '<html><head></head><body>' > reports/kokoro_index.html
+echo '<h1>'${KOKORO_JOB_NAME}', build '#${KOKORO_BUILD_NUMBER}'</h1>' >> reports/kokoro_index.html
+echo '<h2><a href="https://kokoro.corp.google.com/job/'${KOKORO_JOB_PATH}'/'${KOKORO_BUILD_NUMBER}'/">Kokoro build dashboard (internal only)</a></h2>' >> reports/kokoro_index.html
+echo '<h2><a href="https://sponge.corp.google.com/invocation?id='${KOKORO_BUILD_ID}'&searchFor=">Test result dashboard (internal only)</a></h2>' >> reports/kokoro_index.html
+echo '<h2><a href="test_report.html">HTML test report (Not available yet)</a></h2>' >> reports/kokoro_index.html
+echo '<h2><a href="test_log.txt">Test log (Not available yet)</a></h2>' >> reports/kokoro_index.html
+echo '</body></html>' >> reports/kokoro_index.html
+
+echo 'Created reports/kokoro_index.html report index'
diff --git a/tools/internal_ci/helper_scripts/prepare_build_linux_rc b/tools/internal_ci/helper_scripts/prepare_build_linux_rc
index 7b7db19389f8e7decc620c0df4b8fe411a4affb2..049db33ec36317f10984c611afec43b142aa8967 100644
--- a/tools/internal_ci/helper_scripts/prepare_build_linux_rc
+++ b/tools/internal_ci/helper_scripts/prepare_build_linux_rc
@@ -15,6 +15,8 @@
 
 # Source this rc script to prepare the environment for linux builds
 
+tools/internal_ci/helper_scripts/gen_report_index.sh
+
 # Need to increase open files limit for c tests
 ulimit -n 32768
 
diff --git a/tools/internal_ci/helper_scripts/prepare_build_macos_rc b/tools/internal_ci/helper_scripts/prepare_build_macos_rc
index 57463e6f6de6c25e87346502228302d1c1c06516..89e8e24351ceb2632b9ddfcba5a750bebe1518cb 100644
--- a/tools/internal_ci/helper_scripts/prepare_build_macos_rc
+++ b/tools/internal_ci/helper_scripts/prepare_build_macos_rc
@@ -15,6 +15,8 @@
 
 # Source this rc script to prepare the environment for macos builds
 
+tools/internal_ci/helper_scripts/gen_report_index.sh
+
 sudo launchctl limit maxfiles unlimited unlimited
 
 # show current maxfiles
diff --git a/tools/internal_ci/helper_scripts/prepare_build_windows.bat b/tools/internal_ci/helper_scripts/prepare_build_windows.bat
new file mode 100644
index 0000000000000000000000000000000000000000..1634acd389dfb855ac716fd9a58ce568cd2ac1f2
--- /dev/null
+++ b/tools/internal_ci/helper_scripts/prepare_build_windows.bat
@@ -0,0 +1,21 @@
+@rem Copyright 2017 gRPC authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem     http://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+
+@rem make sure msys binaries are preferred over cygwin binaries
+@rem set path to python 2.7
+set PATH=C:\tools\msys64\usr\bin;C:\Python27;%PATH%
+
+bash tools/internal_ci/helper_scripts/gen_report_index.sh
+
+git submodule update --init
diff --git a/tools/internal_ci/linux/grpc_basictests_c_cpp_dbg.cfg b/tools/internal_ci/linux/grpc_basictests_c_cpp_dbg.cfg
index ca547a0a4f776f57f34cfa28e444748c7ace78ae..4a0badf43bc77150b376755dc672797de14b4eb3 100644
--- a/tools/internal_ci/linux/grpc_basictests_c_cpp_dbg.cfg
+++ b/tools/internal_ci/linux/grpc_basictests_c_cpp_dbg.cfg
@@ -20,6 +20,7 @@ timeout_mins: 240
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_basictests_c_cpp_opt.cfg b/tools/internal_ci/linux/grpc_basictests_c_cpp_opt.cfg
index 62f05cef2efe7018247c74ba2825d99052c54340..a2cfe021e165ca64d41410eb830a1fba6983ef4c 100644
--- a/tools/internal_ci/linux/grpc_basictests_c_cpp_opt.cfg
+++ b/tools/internal_ci/linux/grpc_basictests_c_cpp_opt.cfg
@@ -20,6 +20,7 @@ timeout_mins: 240
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_basictests_multilang.cfg b/tools/internal_ci/linux/grpc_basictests_multilang.cfg
index be099d78c70212f4e7a33dcb4e433f8446823637..4433d14cd727c6603295fcd8eb84bd7753130cc6 100644
--- a/tools/internal_ci/linux/grpc_basictests_multilang.cfg
+++ b/tools/internal_ci/linux/grpc_basictests_multilang.cfg
@@ -20,6 +20,7 @@ timeout_mins: 240
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_build_artifacts.cfg b/tools/internal_ci/linux/grpc_build_artifacts.cfg
index eb37b5b0cd6be9ed8c6ee9a486ecd124463fa996..88fc6b7b358333d90e0ec5dd18196681a2a10268 100644
--- a/tools/internal_ci/linux/grpc_build_artifacts.cfg
+++ b/tools/internal_ci/linux/grpc_build_artifacts.cfg
@@ -20,6 +20,7 @@ timeout_mins: 120
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
     regex: "github/grpc/artifacts/**"
   }
 }
diff --git a/tools/internal_ci/linux/grpc_interop_badserver_java.cfg b/tools/internal_ci/linux/grpc_interop_badserver_java.cfg
index 0aadb56c7c85bd62946045712e364b497450f5ee..dc2114273ea6f2326f5da05a28d88c90bb97f983 100644
--- a/tools/internal_ci/linux/grpc_interop_badserver_java.cfg
+++ b/tools/internal_ci/linux/grpc_interop_badserver_java.cfg
@@ -20,7 +20,7 @@ build_file: "grpc/tools/internal_ci/linux/grpc_interop_badserver_java.sh"
 timeout_mins: 480
 action {
   define_artifacts {
-    regex: "**/report.xml",
+    regex: "**/report.xml"
     regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/linux/grpc_interop_badserver_python.cfg b/tools/internal_ci/linux/grpc_interop_badserver_python.cfg
index 29c5c635f9abb9d8ecf1c792f3f49fdc7b9f3758..ec738fcf74adb14feab3b433d48229188fc52818 100644
--- a/tools/internal_ci/linux/grpc_interop_badserver_python.cfg
+++ b/tools/internal_ci/linux/grpc_interop_badserver_python.cfg
@@ -20,7 +20,7 @@ build_file: "grpc/tools/internal_ci/linux/grpc_interop_badserver_python.sh"
 timeout_mins: 480
 action {
   define_artifacts {
-    regex: "**/report.xml",
+    regex: "**/report.xml"
     regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/linux/grpc_interop_matrix.cfg b/tools/internal_ci/linux/grpc_interop_matrix.cfg
index 2fa3e8f897c651a61898e46eee990de971fbd80f..a7fd479a7342ca5760931f1816eb1ab682074558 100644
--- a/tools/internal_ci/linux/grpc_interop_matrix.cfg
+++ b/tools/internal_ci/linux/grpc_interop_matrix.cfg
@@ -21,5 +21,6 @@ timeout_mins: 60
 action {
   define_artifacts {
     regex: "**/sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/linux/grpc_interop_tocloud.cfg b/tools/internal_ci/linux/grpc_interop_tocloud.cfg
index 0c31b497afef410185f1f01810ae76bd8893826f..c613f668d97354e75f0931ca23e70d649535a6ea 100644
--- a/tools/internal_ci/linux/grpc_interop_tocloud.cfg
+++ b/tools/internal_ci/linux/grpc_interop_tocloud.cfg
@@ -21,5 +21,6 @@ timeout_mins: 480
 action {
   define_artifacts {
     regex: "**/sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/linux/grpc_interop_toprod.cfg b/tools/internal_ci/linux/grpc_interop_toprod.cfg
index 18978b87e55cf96cbe236a53376e4d5c969cd7b4..903480a3d18fa9f99927d17c94e892ee28d1bd42 100644
--- a/tools/internal_ci/linux/grpc_interop_toprod.cfg
+++ b/tools/internal_ci/linux/grpc_interop_toprod.cfg
@@ -21,6 +21,7 @@ timeout_mins: 60
 action {
   define_artifacts {
     regex: "**/sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_master.cfg b/tools/internal_ci/linux/grpc_master.cfg
index 8bcc668ba970be186add8d1f1195322a47c5e11a..a2784df297403251ee3232d6457ea09e531145d1 100644
--- a/tools/internal_ci/linux/grpc_master.cfg
+++ b/tools/internal_ci/linux/grpc_master.cfg
@@ -20,6 +20,7 @@ timeout_mins: 240
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_portability.cfg b/tools/internal_ci/linux/grpc_portability.cfg
index c5bfd3bb40b39acd3453bd7a174e14a746b3155d..8c120be6b9ac8f921a0247a476df38a0de625b0b 100644
--- a/tools/internal_ci/linux/grpc_portability.cfg
+++ b/tools/internal_ci/linux/grpc_portability.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_portability_build_only.cfg b/tools/internal_ci/linux/grpc_portability_build_only.cfg
index fce914c6121c7d147f790a1c1b80355fe98f3d34..501223c0c73009a76c70b0fb0b31707816de24a3 100644
--- a/tools/internal_ci/linux/grpc_portability_build_only.cfg
+++ b/tools/internal_ci/linux/grpc_portability_build_only.cfg
@@ -20,6 +20,7 @@ timeout_mins: 180
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_pull_request_sanity.cfg b/tools/internal_ci/linux/grpc_pull_request_sanity.cfg
index 6c76a929c0453bcec1aa4e029a0995665242fed7..b20d2ffba8e5f0951d5ec1ea879b30916bc29e03 100644
--- a/tools/internal_ci/linux/grpc_pull_request_sanity.cfg
+++ b/tools/internal_ci/linux/grpc_pull_request_sanity.cfg
@@ -20,6 +20,7 @@ timeout_mins: 30
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/grpc_sanity.cfg b/tools/internal_ci/linux/grpc_sanity.cfg
index 8dfeda0d4569c73429b4bd36b0f78aefbedf21af..24e7984f3a5ff0916963a122d39fd95939ea6cb2 100644
--- a/tools/internal_ci/linux/grpc_sanity.cfg
+++ b/tools/internal_ci/linux/grpc_sanity.cfg
@@ -20,6 +20,7 @@ timeout_mins: 20
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/grpc_c_asan.cfg b/tools/internal_ci/linux/sanitizer/grpc_c_asan.cfg
index c4beaacf6bb7f336d693179e74faaca3854f33ea..06a4372ce241c22499925dc26b33223fee95f8ea 100644
--- a/tools/internal_ci/linux/sanitizer/grpc_c_asan.cfg
+++ b/tools/internal_ci/linux/sanitizer/grpc_c_asan.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/grpc_c_msan.cfg b/tools/internal_ci/linux/sanitizer/grpc_c_msan.cfg
index 0197966f32f90489ae4e47ff2537f285784c4f79..f875327c1b8c2bf496c958141ceec07db551414a 100644
--- a/tools/internal_ci/linux/sanitizer/grpc_c_msan.cfg
+++ b/tools/internal_ci/linux/sanitizer/grpc_c_msan.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/grpc_c_tsan.cfg b/tools/internal_ci/linux/sanitizer/grpc_c_tsan.cfg
index 243eb99fbbbe07c1742ab9c8d523ea0eed473eae..6658a804d8961518e47dbc9811fd58ec17e99588 100644
--- a/tools/internal_ci/linux/sanitizer/grpc_c_tsan.cfg
+++ b/tools/internal_ci/linux/sanitizer/grpc_c_tsan.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/grpc_c_ubsan.cfg b/tools/internal_ci/linux/sanitizer/grpc_c_ubsan.cfg
index 24c7bf8a4c9312ee78832091aa4d97e165a0e28a..957a91ef2b4ade783675d52c90edf190c7150a84 100644
--- a/tools/internal_ci/linux/sanitizer/grpc_c_ubsan.cfg
+++ b/tools/internal_ci/linux/sanitizer/grpc_c_ubsan.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/grpc_cpp_asan.cfg b/tools/internal_ci/linux/sanitizer/grpc_cpp_asan.cfg
index f12366cb0a745909358e228baa7b9149174d2215..dbbfce90cb56a19cfe16fa12172063ee8e1febdc 100644
--- a/tools/internal_ci/linux/sanitizer/grpc_cpp_asan.cfg
+++ b/tools/internal_ci/linux/sanitizer/grpc_cpp_asan.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/grpc_cpp_tsan.cfg b/tools/internal_ci/linux/sanitizer/grpc_cpp_tsan.cfg
index ca807aed163ae4d73232054b194e59caff5b2970..fb0cefa160698d2d219fc9cea88537e8a21f6a4c 100644
--- a/tools/internal_ci/linux/sanitizer/grpc_cpp_tsan.cfg
+++ b/tools/internal_ci/linux/sanitizer/grpc_cpp_tsan.cfg
@@ -20,6 +20,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_asan.cfg b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_asan.cfg
index 98eb4d0139d7ba3bd597769530c2774e3ebceebc..649d93d0a1277e5be175361f272eec702713ad11 100644
--- a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_asan.cfg
+++ b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_asan.cfg
@@ -21,6 +21,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_msan.cfg b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_msan.cfg
index e47762ca885e60b2844874c2683ac10cd3e58f72..d5ba2031fcbbc3cea600e2daa5bf5580106a10b9 100644
--- a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_msan.cfg
+++ b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_msan.cfg
@@ -21,6 +21,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_tsan.cfg b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_tsan.cfg
index c3803aff5630dd5a43a64cce9b97002c35b3385d..67d4356821a339aaf96ecfc927b544c69d1b6ef3 100644
--- a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_tsan.cfg
+++ b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_tsan.cfg
@@ -21,6 +21,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_ubsan.cfg b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_ubsan.cfg
index 831cfb53ba43a1d6086fb0445afa6f7c73c7e766..c162d1d1d05995466ebb922958cf1e61028ff49a 100644
--- a/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_ubsan.cfg
+++ b/tools/internal_ci/linux/sanitizer/pull_request/grpc_c_ubsan.cfg
@@ -21,6 +21,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_asan.cfg b/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_asan.cfg
index c3324431822b14f56d1c05724f17d5140d60a542..29f1fce5684c3e02900d4db4ae856a883ba8abb2 100644
--- a/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_asan.cfg
+++ b/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_asan.cfg
@@ -21,6 +21,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_tsan.cfg b/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_tsan.cfg
index 92cd93fcac825f5d9fb100075b6ed97f7d8790ec..331f73b3c7f56cf7b41519b6227cb2d9bf5dd222 100644
--- a/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_tsan.cfg
+++ b/tools/internal_ci/linux/sanitizer/pull_request/grpc_cpp_tsan.cfg
@@ -21,6 +21,7 @@ timeout_mins: 1440
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
 
diff --git a/tools/internal_ci/macos/grpc_build_artifacts.cfg b/tools/internal_ci/macos/grpc_build_artifacts.cfg
index 19993809478bce2b27d12043a09c937866d29b35..733933c62a66057d0dba61498a04e4166b38cbc3 100644
--- a/tools/internal_ci/macos/grpc_build_artifacts.cfg
+++ b/tools/internal_ci/macos/grpc_build_artifacts.cfg
@@ -20,6 +20,7 @@ timeout_mins: 120
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
     regex: "github/grpc/artifacts/**"
   }
 }
diff --git a/tools/internal_ci/macos/grpc_interop.cfg b/tools/internal_ci/macos/grpc_interop.cfg
index 25bac2f123d51972f10daa17ab73e62b4de0b711..9f3742c4864b34c9641ac896a824c66fc174c694 100644
--- a/tools/internal_ci/macos/grpc_interop.cfg
+++ b/tools/internal_ci/macos/grpc_interop.cfg
@@ -19,7 +19,7 @@ build_file: "grpc/tools/internal_ci/macos/grpc_interop.sh"
 timeout_mins: 240
 action {
   define_artifacts {
-    regex: "**/*sponge_log.xml",
+    regex: "**/*sponge_log.xml"
     regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/macos/grpc_master.cfg b/tools/internal_ci/macos/grpc_master.cfg
index 1c34979d01260293609394be2193ef8fcce238bc..24c021dfcc22fa78cb717e91f9d84b6869fc2661 100644
--- a/tools/internal_ci/macos/grpc_master.cfg
+++ b/tools/internal_ci/macos/grpc_master.cfg
@@ -20,5 +20,6 @@ timeout_mins: 240
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/windows/grpc_build_artifacts.bat b/tools/internal_ci/windows/grpc_build_artifacts.bat
index 8cfa2fb0beaf4f714a161d6927f524a82c54a547..29c876dd353a0dd5fcdfcf23147e6e5d953f16af 100644
--- a/tools/internal_ci/windows/grpc_build_artifacts.bat
+++ b/tools/internal_ci/windows/grpc_build_artifacts.bat
@@ -12,7 +12,7 @@
 @rem See the License for the specific language governing permissions and
 @rem limitations under the License.
 
-@rem Move python installation from _32bit to _32bits where they are expected python artifact builder
+@rem Move python installation from _32bit to _32bits where they are expected by python artifact builder
 @rem TODO(jtattermusch): get rid of this hack
 rename C:\Python27_32bit Python27_32bits
 rename C:\Python34_32bit Python34_32bits
@@ -21,15 +21,10 @@ rename C:\Python36_32bit Python36_32bits
 
 pacman -S --noconfirm mingw64/mingw-w64-x86_64-gcc mingw32/mingw-w64-i686-gcc
 
-@rem make sure msys binaries are preferred over cygwin binaries
-@rem set path to python 2.7
-set PATH=C:\tools\msys64\usr\bin;C:\Python27;%PATH%
-
-
 @rem enter repo root
 cd /d %~dp0\..\..\..
 
-git submodule update --init
+call tools/internal_ci/helper_scripts/prepare_build_windows.bat
 
 python tools/run_tests/task_runner.py -f artifact windows || goto :error
 goto :EOF
diff --git a/tools/internal_ci/windows/grpc_build_artifacts.cfg b/tools/internal_ci/windows/grpc_build_artifacts.cfg
index da359ca05aeffa3debbfee84a669495a7ce3a0d9..38b0abd519be0d85e5e067599c0fdced3f89679a 100644
--- a/tools/internal_ci/windows/grpc_build_artifacts.cfg
+++ b/tools/internal_ci/windows/grpc_build_artifacts.cfg
@@ -20,6 +20,7 @@ timeout_mins: 120
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
     regex: "github/grpc/artifacts/**"
   }
 }
diff --git a/tools/internal_ci/windows/grpc_master.bat b/tools/internal_ci/windows/grpc_master.bat
index 3984b81075493ca55b980a15d3e314a145dcb27b..58eefc301bb4b5f17f97783dec372ccea21a58d1 100644
--- a/tools/internal_ci/windows/grpc_master.bat
+++ b/tools/internal_ci/windows/grpc_master.bat
@@ -12,14 +12,10 @@
 @rem See the License for the specific language governing permissions and
 @rem limitations under the License.
 
-@rem make sure msys binaries are preferred over cygwin binaries
-@rem set path to python 2.7
-set PATH=C:\tools\msys64\usr\bin;C:\Python27;%PATH%
-
 @rem enter repo root
 cd /d %~dp0\..\..\..
 
-git submodule update --init
+call tools/internal_ci/helper_scripts/prepare_build_windows.bat
 
 python tools/run_tests/run_tests_matrix.py -f basictests windows -j 1 --inner_jobs 8 --internal_ci || goto :error
 goto :EOF
diff --git a/tools/internal_ci/windows/grpc_master.cfg b/tools/internal_ci/windows/grpc_master.cfg
index 80abea6c381e2adda3308dccb34d2fce51878ad6..786ebc019735366bc6a2e196ab259a324598b41c 100644
--- a/tools/internal_ci/windows/grpc_master.cfg
+++ b/tools/internal_ci/windows/grpc_master.cfg
@@ -20,5 +20,6 @@ timeout_mins: 360
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }
diff --git a/tools/internal_ci/windows/grpc_portability_master.bat b/tools/internal_ci/windows/grpc_portability_master.bat
index cb6b1fe1337e35294dd203df5c07ca3606103a35..c93d56c7e4acb3fcdca6b7ad145d45abe42a6f6d 100644
--- a/tools/internal_ci/windows/grpc_portability_master.bat
+++ b/tools/internal_ci/windows/grpc_portability_master.bat
@@ -12,14 +12,10 @@
 @rem See the License for the specific language governing permissions and
 @rem limitations under the License.
 
-@rem make sure msys binaries are preferred over cygwin binaries
-@rem set path to python 2.7
-set PATH=C:\tools\msys64\usr\bin;C:\Python27;%PATH%
-
 @rem enter repo root
 cd /d %~dp0\..\..\..
 
-git submodule update --init
+call tools/internal_ci/helper_scripts/prepare_build_windows.bat
 
 python tools/run_tests/run_tests_matrix.py -f portability windows -j 1 --inner_jobs 8 --internal_ci || goto :error
 goto :EOF
diff --git a/tools/internal_ci/windows/grpc_portability_master.cfg b/tools/internal_ci/windows/grpc_portability_master.cfg
index cb48d35de9e04c1ffb82686e3c5f96bd9d975e79..85f692725463999e90f7ce2fa51e73de7c1e1c94 100644
--- a/tools/internal_ci/windows/grpc_portability_master.cfg
+++ b/tools/internal_ci/windows/grpc_portability_master.cfg
@@ -20,5 +20,6 @@ timeout_mins: 360
 action {
   define_artifacts {
     regex: "**/*sponge_log.xml"
+    regex: "github/grpc/reports/**"
   }
 }