diff --git a/guix/scripts/deploy.scm b/guix/scripts/deploy.scm
index 4466a0c6324b4595931cae0dc2cd7f975b0e0628..09ad63c44a4d400d0c6bc98a1435db8e21d3a2ae 100644
--- a/guix/scripts/deploy.scm
+++ b/guix/scripts/deploy.scm
@@ -140,18 +140,19 @@ (define (guix-deploy . args)
   (define (handle-argument arg result)
     (alist-cons 'file arg result))
 
-  (let* ((opts (parse-command-line args %options (list %default-options)
-                                   #:argument-handler handle-argument))
-         (file (assq-ref opts 'file))
-         (machines (or (and file (load-source-file file)) '())))
-    (show-what-to-deploy machines)
-
-    (with-status-verbosity (assoc-ref opts 'verbosity)
-      (with-store store
-        (set-build-options-from-command-line store opts)
-        (with-build-handler (build-notifier #:use-substitutes?
-                                            (assoc-ref opts 'substitutes?))
-          (parameterize ((%graft? (assq-ref opts 'graft?)))
-            (map/accumulate-builds store
-                                   (cut deploy-machine* store <>)
-                                   machines)))))))
+  (with-error-handling
+    (let* ((opts (parse-command-line args %options (list %default-options)
+                                     #:argument-handler handle-argument))
+           (file (assq-ref opts 'file))
+           (machines (or (and file (load-source-file file)) '())))
+      (show-what-to-deploy machines)
+
+      (with-status-verbosity (assoc-ref opts 'verbosity)
+        (with-store store
+          (set-build-options-from-command-line store opts)
+          (with-build-handler (build-notifier #:use-substitutes?
+                                              (assoc-ref opts 'substitutes?))
+            (parameterize ((%graft? (assq-ref opts 'graft?)))
+              (map/accumulate-builds store
+                                     (cut deploy-machine* store <>)
+                                     machines))))))))