diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml
index 60459fa612d095fa28ca8b31d8622896c9aea92f..814db9cca9d3b8ead6525c805a08d9fa0b6196ed 100644
--- a/.gitlab/ci/frontend.gitlab-ci.yml
+++ b/.gitlab/ci/frontend.gitlab-ci.yml
@@ -228,6 +228,21 @@ graphql-schema-dump:
       - tmp/tests/graphql/gitlab_schema.graphql
       - tmp/tests/graphql/gitlab_schema.json
 
+upload-graphql-schema-dump:
+  stage: fixtures
+  variables:
+    SETUP_DB: "false"
+  extends:
+    - .default-retry
+    - .ruby-cache
+    - .default-before_script
+    - .frontend:rules:upload-graphql-schema-dump
+    - .with-graphql-schema-dump-needs
+  script:
+    - source scripts/gitlab_component_helpers.sh
+    - create_and_upload_graphql_schema_package
+
+
 .frontend-test-base:
   extends:
     - .default-retry
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index b5ab63fe72c4840657f09d940208704184ce84fe..624d9ac904ad8ca9435ab9ed9e2095ac37196517 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -195,6 +195,9 @@
 .if-dot-com-gitlab-org-default-branch: &if-dot-com-gitlab-org-default-branch
   if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"'
 
+.if-not-dot-com-gitlab-org-default-branch: &if-not-dot-com-gitlab-org-default-branch
+  if: '$CI_SERVER_HOST != "gitlab.com" || $CI_PROJECT_NAMESPACE != "gitlab-org" || $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event"'
+
 .if-dot-com-gitlab-org-merge-request: &if-dot-com-gitlab-org-merge-request
   if: '($CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_EVENT_TYPE != "merge_train") && $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"'
 
@@ -1303,6 +1306,13 @@
     - <<: *if-default-refs
       changes: *docs-patterns
 
+
+.frontend:rules:upload-graphql-schema-dump:
+  rules:
+    - <<: *if-not-dot-com-gitlab-org-default-branch
+      when: never
+    - !reference [.frontend:rules:default-frontend-jobs-with-docs-changes, rules]
+
 # .frontend:rules:default-frontend-jobs, with a additional rules when MR is not approved
 .frontend:rules:frontend_fixture:
   rules:
diff --git a/scripts/gitlab_component_helpers.sh b/scripts/gitlab_component_helpers.sh
index e16770760ff8c8f9be884a67ca887493165caee1..bd86f5c89a71befa50669d636e0d47d39ccd751e 100644
--- a/scripts/gitlab_component_helpers.sh
+++ b/scripts/gitlab_component_helpers.sh
@@ -47,6 +47,11 @@ export GITLAB_WORKHORSE_TREE=${GITLAB_WORKHORSE_TREE:-$(git rev-parse HEAD:workh
 export GITLAB_WORKHORSE_PACKAGE="workhorse-${GITLAB_WORKHORSE_TREE}.tar.gz"
 export GITLAB_WORKHORSE_PACKAGE_URL="${API_PACKAGES_BASE_URL}/${GITLAB_WORKHORSE_FOLDER}/${GITLAB_WORKHORSE_TREE}/${GITLAB_WORKHORSE_PACKAGE}"
 
+# Graphql Schema dump constants
+export GRAPHQL_SCHEMA_PACKAGE="graphql-schema.tar.gz"
+export GRAPHQL_SCHEMA_PATH="tmp/tests/graphql/"
+export GRAPHQL_SCHEMA_PACKAGE_URL="${API_PACKAGES_BASE_URL}/graphql-schema/master/${GRAPHQL_SCHEMA_PACKAGE}"
+
 # Assets constants
 export GITLAB_ASSETS_PATHS_LIST="cached-assets-hash.txt app/assets/javascripts/locale/**/app.js public/assets/"
 export GITLAB_ASSETS_PACKAGE_VERSION="v2" # bump this version each time GITLAB_ASSETS_PATHS_LIST is changed
@@ -174,6 +179,11 @@ function create_fixtures_package() {
   create_package "${FIXTURES_PACKAGE}" "${FIXTURES_PATH}"
 }
 
+function create_and_upload_graphql_schema_package() {
+  create_package "${GRAPHQL_SCHEMA_PACKAGE}" "${GRAPHQL_SCHEMA_PATH}"
+  upload_package "${GRAPHQL_SCHEMA_PACKAGE}" "${GRAPHQL_SCHEMA_PACKAGE_URL}"
+}
+
 function download_and_extract_fixtures() {
   read_curl_package "${FIXTURES_PACKAGE_URL}" | extract_package
 }