diff --git a/lib/spack/spack/reporters/cdash.py b/lib/spack/spack/reporters/cdash.py
index 068f9275b7f3fc5751a383bf7ad792df0117e249..2f74e4ec0d854fc5db1f895de510a23d49321990 100644
--- a/lib/spack/spack/reporters/cdash.py
+++ b/lib/spack/spack/reporters/cdash.py
@@ -63,6 +63,7 @@ def __init__(self, args):
         buildstamp_format = "%Y%m%d-%H%M-{0}".format(args.cdash_track)
         self.buildstamp = time.strftime(buildstamp_format,
                                         time.localtime(self.starttime))
+        self.buildId = None
 
     def build_report(self, filename, report_data):
         self.initialize_report(filename, report_data)
@@ -159,6 +160,7 @@ def clean_log_event(event):
                 t = env.get_template(phase_template)
                 f.write(t.render(report_data))
             self.upload(phase_report)
+        self.print_cdash_link()
 
     def concretization_report(self, filename, msg):
         report_data = {}
@@ -174,6 +176,7 @@ def concretization_report(self, filename, msg):
         with open(output_filename, 'w') as f:
             f.write(t.render(report_data))
         self.upload(output_filename)
+        self.print_cdash_link()
 
     def initialize_report(self, filename, report_data):
         if not os.path.exists(filename):
@@ -191,13 +194,29 @@ def upload(self, filename):
         # Compute md5 checksum for the contents of this file.
         md5sum = checksum(hashlib.md5, filename, block_size=8192)
 
+        buildid_regexp = re.compile("<buildId>([0-9]+)</buildId>")
         opener = build_opener(HTTPHandler)
         with open(filename, 'rb') as f:
-            url = "{0}&MD5={1}".format(self.cdash_upload_url, md5sum)
+            url = "{0}&build={1}&site={2}&stamp={3}&MD5={4}".format(
+                self.cdash_upload_url, self.buildname, self.site,
+                self.buildstamp, md5sum)
             request = Request(url, data=f)
             request.add_header('Content-Type', 'text/xml')
             request.add_header('Content-Length', os.path.getsize(filename))
             # By default, urllib2 only support GET and POST.
             # CDash needs expects this file to be uploaded via PUT.
             request.get_method = lambda: 'PUT'
-            url = opener.open(request)
+            response = opener.open(request)
+            if not self.buildId:
+                match = buildid_regexp.search(response.read())
+                if match:
+                    self.buildId = match.group(1)
+
+    def print_cdash_link(self):
+        if self.buildId:
+            # Construct and display a helpful link if CDash responded with
+            # a buildId.
+            build_url = self.cdash_upload_url
+            build_url = build_url[0:build_url.find("submit.php")]
+            build_url += "buildSummary.php?buildid={0}".format(self.buildId)
+            print("View your build results here:\n  {0}\n".format(build_url))