diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 971caf9423534d86ef99c6bcd841ebe5bd09ced3..c7aa4fab400a60bb611551b50e2e1ff7a2285a01 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,6 +13,7 @@ variables:
   DATA_CONUS_2018A: conus-2018a
 
 stages:
+  - assemble
   - test
   - publish
   - deploy
@@ -61,7 +62,6 @@ stages:
   cache: {}
   image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
   dependencies:
-  retry: 2
   before_script:
     - docker stack rm nshmp-netcdf
     - *static-data
@@ -87,6 +87,9 @@ stages:
   variables:
     APP_NAME: nshmp-netcdf
     STACK_NAME: nshmp-netcdf
+  retry:
+    max: 2
+    when: 'always'
 
 .staging:
   only:
@@ -102,41 +105,23 @@ stages:
     - staging02
 
 ####
-# Build jar file.
-# Globals:
-#   (string) CI_PROJECT_NAME - The name of the project
+# Stage: assemble
 ####
-Build Project:
-  extends:
-    - .gradle
-  script:
-    - ./gradlew --no-daemon assemble
 
-####
-# Run Spotless check.
-####
-Spotless Check:
+Build Project:
   extends:
     - .gradle
+  stage: assemble
   script:
-    - ./gradlew --no-daemon spotlessCheck
+    - ./gradlew --build-cache --no-daemon assemble
+  retry:
+    max: 2
+    when: 'always'
 
 ####
-# Run Spotbugs main.
+# Stage: test
 ####
-Spotbugs Main:
-  extends:
-    - .gradle
-  script:
-    - ./gradlew --no-daemon spotbugsMain
 
-####
-# Run tests.
-# Globals:
-#   (string) JACOCO_HTML_DIR - Directory of Jacoco html reports
-#   (string) JUNIT_FILES - Path to all Junit html files
-#   (string) CI_PROJECT_NAME - The name of the project
-####
 Unit Tests:
   stage: test
   image: gradle:jdk11
@@ -154,12 +139,10 @@ Unit Tests:
       - ${REPORTS_DIR}
     reports:
       junit: ${JUNIT_FILES}
+  retry:
+    max: 2
+    when: 'always'
 
-####
-# Build Docker image.
-# Globals:
-#   IMAGE_NAME - Docker image name
-####
 Build Image:
   stage: test
   image: docker:stable-git
@@ -176,12 +159,10 @@ Build Image:
           --build-arg git_username="${GIT_NSHMP_USERNAME}" \
           --build-arg git_password="${GIT_NSHMP_PASSWORD}" \
           -t local/${IMAGE_NAME} .
+  retry:
+    max: 2
+    when: 'always'
 
-####
-# Build and publish Docker images with data from AWS S3.
-# Globals:
-#   IMAGE_NAME - Docker image name
-####
 Build/Publish Data Images:
   stage: publish
   image: docker:stable-git
@@ -212,19 +193,20 @@ Build/Publish Data Images:
         docker image rm ${INTERNAL_IMAGE_NAME};
       done
     - rm -rf /root/.docker/config.json
+  retry:
+    max: 2
+    when: 'always'
 
 ####
-# Deploy to stage01
+# Stage: deploy
 ####
+
 Staging 01:
   extends:
     - .deploy
     - .staging
     - .staging01
 
-####
-# Deploy to stage02
-####
 Staging 02:
   extends:
     - .deploy