diff --git a/cloud-providers/aws-global.yml b/cloud-providers/aws-global.yml
index 70a32d11d6ebba253c2ef4ec0baa98a8725daf45..d454aac283fe18e75f73d302dca47b192a32128d 100644
--- a/cloud-providers/aws-global.yml
+++ b/cloud-providers/aws-global.yml
@@ -24,8 +24,7 @@ aws-containerize:
     - .aws_common_variables
     - .aws_variables
   stage: containerize
-  needs: ['compile-and-unit-test']
-  script:    
+  script:
     - |
       if [ -z $AWS_BUILDER_DOCKERFILE_PATH ] && [ -z $AWS_RUNTIME_DOCKERFILE_PATH ]; then
         echo Building BUILD_DIR/Dockerfile container
@@ -45,9 +44,11 @@ aws-containerize:
     - docker tag $LOCAL_IMAGE_TAG $AWS_IMAGE_TAG_BASE:latest
     - docker push $AWS_IMAGE_TAG_BASE:$CI_COMMIT_SHA
     - docker push $AWS_IMAGE_TAG_BASE:latest
-  only:
-    variables:
-      - $AWS == '1'
+  rules:
+    - if: '$CSP_BUILD_ENABLED == "true" && $AWS == "1"'
+      needs: [ "aws-compile-and-unit-test" ]
+    - if: '$AWS == "1"'
+      needs: [ "compile-and-unit-test" ]
 
 aws-update-helm:
   extends:
diff --git a/cloud-providers/aws-maven.yml b/cloud-providers/aws-maven.yml
index d311dfb887327654a0a81abe7a60b01a9e68cb0c..87ab2c89c52fde83f54be4584cd4ab80d758212e 100644
--- a/cloud-providers/aws-maven.yml
+++ b/cloud-providers/aws-maven.yml
@@ -1,3 +1,21 @@
+aws-compile-and-unit-test:
+  extends:
+    - .maven
+    - .skipForTriggeringMergeRequests
+  stage: csp-build
+  needs: ['compile-and-unit-test']
+  script:
+    - mvn clean package -f pom.xml -P aws
+  after_script:
+    - find . -path '*/target/*.jar' -o -name 'maven-*-output.txt' | xargs du -hsc
+  rules:
+    - if: $CI_COMMIT_REF_NAME !~ /^trusted-/ && $CI_MERGE_REQUEST_ID
+      when: never
+    - if: $CI_COMMIT_REF_NAME =~ /^trusted-/ && $CSP_BUILD_ENABLED == "true" && $AWS == "1"
+      when: always
+    - if: ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main") && $CSP_BUILD_ENABLED == "true" && $AWS == "1"
+      when: always
+
 aws-test-java:
   extends:
     - .maven
diff --git a/cloud-providers/azure-function.yml b/cloud-providers/azure-function.yml
index 9dfefe1d383c3ab46662bd298911aa91c2dd68f4..30e86f7df4fbf8c598fbd4b8bdb1ad4e570e2516 100644
--- a/cloud-providers/azure-function.yml
+++ b/cloud-providers/azure-function.yml
@@ -11,7 +11,6 @@ azure_containerize:
   tags: ["osdu-medium"]
   image: danielscholl/azure-build-image
   stage: containerize
-  needs: ["compile-and-unit-test"]
   variables:
     SHA_IMAGE: ${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}:${CI_COMMIT_SHA}
     LATEST_IMAGE: ${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}:latest
@@ -30,9 +29,11 @@ azure_containerize:
     - docker push ${AZURE_REGISTRY}.azurecr.io/$SHA_IMAGE
     - docker tag $CI_REGISTRY_IMAGE/$SHA_IMAGE ${AZURE_REGISTRY}.azurecr.io/$LATEST_IMAGE
     - docker push ${AZURE_REGISTRY}.azurecr.io/$LATEST_IMAGE
-  only:
-    variables:
-      - $AZURE == '1'
+  rules:
+    - if: '$CSP_BUILD_ENABLED == "true" && $AZURE == "1"'
+      needs: [ "azure-compile-and-unit-test" ]
+    - if: '$AZURE == "1"'
+      needs: [ "compile-and-unit-test" ]
 
 azure_deploy:
   image: danielscholl/azure-build-image
diff --git a/cloud-providers/azure.yml b/cloud-providers/azure.yml
index eb1856955fa9251fffa78dd3176c2b84ae723ac6..7378fe54672368910b9378f0393f0f9269a727e7 100644
--- a/cloud-providers/azure.yml
+++ b/cloud-providers/azure.yml
@@ -171,12 +171,28 @@ include:
 
 # JOBS
 # --------------------------------------------------------------------------------
+azure-compile-and-unit-test:
+  extends:
+    - .maven
+    - .skipForTriggeringMergeRequests
+  stage: csp-build
+  needs: ['compile-and-unit-test']
+  script:
+    - mvn clean package -f pom.xml -P azure
+  after_script:
+    - find . -path '*/target/*.jar' -o -name 'maven-*-output.txt' | xargs du -hsc
+  rules:
+    - if: $CI_COMMIT_REF_NAME !~ /^trusted-/ && $CI_MERGE_REQUEST_ID
+      when: never
+    - if: $CI_COMMIT_REF_NAME =~ /^trusted-/ && $CSP_BUILD_ENABLED == "true" && $AZURE == "1"
+      when: always
+    - if: ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main") && $CSP_BUILD_ENABLED == "true" && $AZURE == "1"
+      when: always
 
 azure_containerize:
   tags: ["osdu-medium"]
   image: danielscholl/azure-build-image
   stage: containerize
-  needs: ["compile-and-unit-test"]
   environment: $DEPLOY_ENVIRONMENT_AZURE
   variables:
     SHA_IMAGE: ${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}:${CI_COMMIT_SHA}
@@ -223,9 +239,14 @@ azure_containerize:
         docker tag $CI_REGISTRY_IMAGE/$SHA_IMAGE ${AZURE_REGISTRY}.azurecr.io/$RELEASE_IMAGE
         docker push ${AZURE_REGISTRY}.azurecr.io/$RELEASE_IMAGE
       fi
-  only:
-    variables:
-      - $AZURE == '1'
+  rules:
+    - if: '$CSP_BUILD_ENABLED == "true"'
+      needs: [ "azure-compile-and-unit-test" ]
+    - if: '$CSP_BUILD_ENABLED == ""'
+      needs: [ "compile-and-unit-test" ]
+    - if: '$AZURE == "1"'
+      when: on_success
+      allow_failure: true
 
 # Helm build and push to glab ACR/helm
 azure_containerize_helm:
@@ -480,7 +501,6 @@ azure-acceptance-test:
 azure_code_coverage:
   stage: coverage
   environment: $DEPLOY_ENVIRONMENT_AZURE
-  needs: ["compile-and-unit-test"]
   retry: 1
   extends:
     - .maven
@@ -497,9 +517,13 @@ azure_code_coverage:
       dotenv: azure_code_coverage.env
     paths:
       - $AZURE_BUILD_SUBDIR/target/site/
-  only:
-    variables:
-      - $AZURE == '1' && $AZURE_SKIP_DEPLOY != 'true' && $AZURE_SKIP_COVERAGE != 'true'
+  rules:
+    - if: '$CSP_BUILD_ENABLED == "true"'
+      needs: [ "azure-compile-and-unit-test" ]
+    - if: '$CSP_BUILD_ENABLED == ""'
+      needs: [ "compile-and-unit-test" ]
+    - if: '$AZURE == "1" && $AZURE_SKIP_DEPLOY != "true" && $AZURE_SKIP_COVERAGE != "true"'
+      when: on_success
 
 azure_test_py:
   image: $CI_REGISTRY/danielscholl/azure-maven/azure-maven:v1.0
diff --git a/cloud-providers/gc-bootstrap.yml b/cloud-providers/gc-bootstrap.yml
index 557d910ad39c1ad581b427b24b85507d56907ea4..9f11befe93f55f5a4079176a815c32a277c27c4d 100644
--- a/cloud-providers/gc-bootstrap.yml
+++ b/cloud-providers/gc-bootstrap.yml
@@ -1,7 +1,6 @@
 gc-containerize-bootstrap-gitlab:
   stage: containerize
   image: docker:19.03.15
-  needs: ["compile-and-unit-test"]
   tags: ["osdu-small"]
   services:
     - docker:20.10.7-dind
@@ -11,15 +10,16 @@ gc-containerize-bootstrap-gitlab:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker push $CI_REGISTRY_IMAGE/$IMAGE_BOOTSTRAP_NAME
   rules:
+    - if: '$CSP_BUILD_ENABLED == "true" && $GC == "1" && $GC_ENABLE_BOOTSTRAP == "true"'
+      needs: ["gc-compile-and-unit-test"]
     - if: "$GC == '1' && $GC_ENABLE_BOOTSTRAP == 'true'"
-      when: on_success
+      needs: ["compile-and-unit-test"]
 
 gc-containerize-bootstrap-gcr:
   environment:
     name: GC_Baremetal
   stage: containerize
   image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
-  needs: ["compile-and-unit-test"]
   id_tokens:
     GITLAB_OIDC_TOKEN:
       aud: https://iam.googleapis.com/projects/${GC_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GC_POOL_ID}/providers/${GC_PROVIDER_ID}
@@ -33,5 +33,7 @@ gc-containerize-bootstrap-gcr:
     - docker build -t $GC_GCR_REGISTRY/$GC_SERVICE/$IMAGE_BOOTSTRAP_NAME:$CI_COMMIT_TAG $BUILD_ARGS -f $BUILD_BOOTSTRAP_PATH .
     - docker push $GC_GCR_REGISTRY/$GC_SERVICE/$IMAGE_BOOTSTRAP_NAME:$CI_COMMIT_TAG
   rules:
+    - if: '$CSP_BUILD_ENABLED == "true" && $GC == "1" && $CI_COMMIT_TAG && $GC_ENABLE_BOOTSTRAP == "true"'
+      needs: ["gc-compile-and-unit-test"]
     - if: '$GC == "1" && $CI_COMMIT_TAG && $GC_ENABLE_BOOTSTRAP == "true"'
-      when: on_success
+      needs: ["compile-and-unit-test"]
\ No newline at end of file
diff --git a/cloud-providers/gc-containerize.yml b/cloud-providers/gc-containerize.yml
index e382cc00235656b876ff37c5e840840f1f40d2cd..f19de669069117656fd3b1369865169f6b9a5e09 100644
--- a/cloud-providers/gc-containerize.yml
+++ b/cloud-providers/gc-containerize.yml
@@ -6,7 +6,6 @@ gc-containerize-gitlab:
   environment:
     name: Google_Cloud
   stage: containerize
-  needs: ["compile-and-unit-test"]
   tags: ["osdu-small"]
   image: docker:19.03
   cache: {}
@@ -18,14 +17,15 @@ gc-containerize-gitlab:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME
   rules:
-    - if: "$GC == '1'"
-      when: on_success
+    - if: '$CSP_BUILD_ENABLED == "true" && $GC == "1"'
+      needs: ["gc-compile-and-unit-test"]
+    - if: '$GC == "1"'
+      needs: ["compile-and-unit-test"]
 
 gc-containerize-gcr:
   environment:
     name: GC_Baremetal
   stage: containerize
-  needs: ["compile-and-unit-test"]
   id_tokens:
     GITLAB_OIDC_TOKEN:
       aud: https://iam.googleapis.com/projects/${GC_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GC_POOL_ID}/providers/${GC_PROVIDER_ID}
@@ -43,5 +43,7 @@ gc-containerize-gcr:
     - docker build -t $GC_GCR_REGISTRY/$GC_SERVICE/$IMAGE_NAME:$CI_COMMIT_TAG -f $BUILD_PATH $BUILD_ARGS .
     - docker push $GC_GCR_REGISTRY/$GC_SERVICE/$IMAGE_NAME:$CI_COMMIT_TAG
   rules:
+    - if: '$CSP_BUILD_ENABLED == "true" && $GC == "1" && $CI_COMMIT_TAG'
+      needs: ["gc-compile-and-unit-test"]
     - if: '$GC == "1" && $CI_COMMIT_TAG'
-      when: on_success
+      needs: ["compile-and-unit-test"]
diff --git a/cloud-providers/gc-global.yml b/cloud-providers/gc-global.yml
index 33c6d1fac4463a262d443c4d4ba5bb20a5cd0bba..1587b4d92b04d7f5de396aea27ff270d64b7d18e 100644
--- a/cloud-providers/gc-global.yml
+++ b/cloud-providers/gc-global.yml
@@ -9,4 +9,5 @@ include:
   - local: "cloud-providers/gc-preship-variables.yml"
   - local: "cloud-providers/gc-preship-gke.yml"
   - local: "cloud-providers/gc-helm.yml"
+  - local: "cloud-providers/gc-maven-compile.yml"
   - local: "cloud-providers/gc-global-variables.yml"
diff --git a/cloud-providers/gc-mappers.yml b/cloud-providers/gc-mappers.yml
index 1d6b265ad620da5295df4a0321c5632134be5905..7a67fe4ef56d8e2d7035980064a1885030f57d2f 100644
--- a/cloud-providers/gc-mappers.yml
+++ b/cloud-providers/gc-mappers.yml
@@ -13,7 +13,6 @@ gc-test:
     - .maven
   stage: integration
   tags: ["osdu-small"]
-  needs: ["compile-and-unit-test"]
   retry: 1
   script:
     - export GOOGLE_APPLICATION_CREDENTIALS=$GC_MAPPERS_INTEGRATION_TESTER
@@ -30,6 +29,10 @@ gc-test:
       - test-results.log
     expire_in: 1 days
   rules:
+    - if: '$CSP_BUILD_ENABLED == "true"'
+      needs: ["gc-compile-and-unit-test"]
+    - if: '$CSP_BUILD_ENABLED == ""'
+      needs: ["compile-and-unit-test"]
     - if: "$CI_COMMIT_BRANCH =~ /^release/"
       when: never
     - if: "$CI_COMMIT_TAG"
diff --git a/cloud-providers/gc-maven-compile.yml b/cloud-providers/gc-maven-compile.yml
new file mode 100644
index 0000000000000000000000000000000000000000..aaa46209488724f03a6100c8390023c1b24c4ab8
--- /dev/null
+++ b/cloud-providers/gc-maven-compile.yml
@@ -0,0 +1,17 @@
+gc-compile-and-unit-test:
+  extends:
+    - .maven
+    - .skipForTriggeringMergeRequests
+  stage: csp-build
+  needs: ['compile-and-unit-test']
+  script:
+    - mvn clean package -f pom.xml -P gc
+  after_script:
+    - find . -path '*/target/*.jar' -o -name 'maven-*-output.txt' | xargs du -hsc
+  rules:
+    - if: $CI_COMMIT_REF_NAME !~ /^trusted-/ && $CI_MERGE_REQUEST_ID
+      when: never
+    - if: $CI_COMMIT_REF_NAME =~ /^trusted-/ && $CSP_BUILD_ENABLED == "true" && $GC == "1"
+      when: always
+    - if: ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main") && $CSP_BUILD_ENABLED == "true" && $GC == "1"
+      when: always
\ No newline at end of file
diff --git a/cloud-providers/ibm-deploy-only.yml b/cloud-providers/ibm-deploy-only.yml
index d2080d4bcf7698898238601cfef851ea1d71aea5..b339848ab2025ec0dd8bae758fdbd9d1f6333bf9 100644
--- a/cloud-providers/ibm-deploy-only.yml
+++ b/cloud-providers/ibm-deploy-only.yml
@@ -66,7 +66,6 @@ ibm-helm-charts-release:
 ibm-deploy:
   extends: .ibm
   stage: deploy
-  needs: ['compile-and-unit-test']
   retry: 1
   script:
     - cp -v ${IBM_BUILD_SUBDIR}/target/*-spring-boot.jar "$IBM_DEPLOY_DIR"
@@ -77,9 +76,12 @@ ibm-deploy:
     - oc start-build $CI_PROJECT_NAME --commit=$CI_COMMIT_SHA --follow
     - oc get service $CI_PROJECT_NAME 2> /dev/null || oc new-app $CI_PROJECT_NAME
   rules:
+    - if: $CSP_BUILD_ENABLED == "true" && $IBM_BUILD_SUBDIR && $IBM == '1' && $IBM_OPENSHIFT_URL && $IBM_OPENSHIFT_TOKEN
+      needs: [ "ibm-compile-and-unit-test" ]
+    - if: $IBM_BUILD_SUBDIR && $IBM == '1' && $IBM_OPENSHIFT_URL && $IBM_OPENSHIFT_TOKEN
+      needs: [ "compile-and-unit-test" ]
     - if: $IBM_SKIP_DEPLOY == 'true'
       when: never
-    - if: $IBM_BUILD_SUBDIR && $IBM == '1' && $IBM_OPENSHIFT_URL && $IBM_OPENSHIFT_TOKEN
 
 ibm-deploy-devpri:
   extends: .ibm
diff --git a/cloud-providers/ibm.yml b/cloud-providers/ibm.yml
index 7ef32cf6651c6a457d6b6050b75ede48e2f7d5cd..07a50fbc4e428f7801506028e1dda30318fcfaee 100644
--- a/cloud-providers/ibm.yml
+++ b/cloud-providers/ibm.yml
@@ -66,7 +66,6 @@ ibm-helm-charts-release:
 ibm-deploy:
   extends: .ibm
   stage: deploy
-  needs: ['compile-and-unit-test']
   retry: 1
   script:
     - cp -v ${IBM_BUILD_SUBDIR}/target/*-spring-boot.jar "$IBM_DEPLOY_DIR"
@@ -76,9 +75,12 @@ ibm-deploy:
     - oc start-build $CI_PROJECT_NAME --commit=$CI_COMMIT_SHA --follow
     - oc get service $CI_PROJECT_NAME 2> /dev/null || oc new-app $CI_PROJECT_NAME
   rules:
+    - if: $CSP_BUILD_ENABLED == 'true' && $IBM_BUILD_SUBDIR && $IBM == '1' && $IBM_OPENSHIFT_URL && $IBM_OPENSHIFT_TOKEN
+      needs: [ "ibm-compile-and-unit-test" ]
+    - if: $IBM_BUILD_SUBDIR && $IBM == '1' && $IBM_OPENSHIFT_URL && $IBM_OPENSHIFT_TOKEN
+      needs: [ "compile-and-unit-test" ]
     - if: $IBM_SKIP_DEPLOY == 'true'
       when: never
-    - if: $IBM_BUILD_SUBDIR && $IBM == '1' && $IBM_OPENSHIFT_URL && $IBM_OPENSHIFT_TOKEN
     
 ibm-deploy-devpri:
   extends: .ibm
@@ -232,6 +234,23 @@ ibm-deploy-devpri:
     SCHEMA_HOST: ${IBM_SCHEMA_HOST}/api/schema-service/v1
     WELL_DELIVERY_URL: $IBM_ENTITY_URL
 
+ibm-compile-and-unit-test:
+  extends:
+    - .maven
+    - .skipForTriggeringMergeRequests
+  stage: csp-build
+  needs: ['compile-and-unit-test']
+  script:
+    - mvn clean package -f pom.xml -P ibm
+  after_script:
+    - find . -path '*/target/*.jar' -o -name 'maven-*-output.txt' | xargs du -hsc
+  rules:
+    - if: $CI_COMMIT_REF_NAME !~ /^trusted-/ && $CI_MERGE_REQUEST_ID
+      when: never
+    - if: $CI_COMMIT_REF_NAME =~ /^trusted-/ && $CSP_BUILD_ENABLED == "true" && $IBM == "1"
+      when: always
+    - if: ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main") && $CSP_BUILD_ENABLED == "true" && $IBM == "1"
+      when: always
 
 ibm-test:
   stage: integration
diff --git a/standard-setup.yml b/standard-setup.yml
index fe901fac5987cf23d586e0910a602b2fc6c91048..0920e39f0925840943b8de9d82143d50b583c53c 100644
--- a/standard-setup.yml
+++ b/standard-setup.yml
@@ -1,6 +1,7 @@
 stages:
   - review
   - build
+  - csp-build
   - coverage
   - containerize
   - scan
@@ -34,11 +35,11 @@ workflow:
     - if: $CI_MERGE_REQUEST_LABELS =~ /no-detached-pipeline/
       when: never
 
-    # If the pipelines are from release or tag commits then set azure deployment env variable value   
+    # If the pipelines are from release or tag commits then set azure deployment env variable value
     - if: $CI_COMMIT_BRANCH =~ /^release/ || $CI_COMMIT_TAG
       variables:
         DEPLOY_ENVIRONMENT_AZURE: "AZURE_STAGE"
-        
+
     # In all other cases, run the pipeline normally
     - when: always