diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b3632046d62e24e1687b01c9633505475f17aec5_LmdpdGxhYi1jaS55bWw=..1659a47a6f6f538d5134ebfa639935756753c4c0_LmdpdGxhYi1jaS55bWw= 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -184,10 +184,12 @@
     reports:
       dotenv: build_facts/env_vars
   rules:
-    # Run on dev.gitlab.org and multi-project pipelines on omnibus-gitlab-mirror
-    - if: '$CI_PROJECT_PATH == "gitlab/omnibus-gitlab"'
-    - if: '$CI_PIPELINE_SOURCE == "pipeline" && $CI_PROJECT_PATH == "gitlab-org/build/omnibus-gitlab-mirror"'
-    - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_PATH == "gitlab-org/build/omnibus-gitlab-mirror"'
+    - if: '$DEPS_PIPELINE || $CACHE_UPDATE || $DEPENDENCY_SCANNING'
+      when: never
+    - if: '$CI_BRANCH_NAME =~ /^[0-9]+-[0-9]+-auto-deploy-[0-9]+$/ || $CI_BRANCH_NAME =~ /^deps/'
+      when: never
+    - when: always
+  needs: []
 
 include:
   - '/gitlab-ci-config/gitlab-com.yml'
diff --git a/gitlab-ci-config/gitlab-com.yml b/gitlab-ci-config/gitlab-com.yml
index b3632046d62e24e1687b01c9633505475f17aec5_Z2l0bGFiLWNpLWNvbmZpZy9naXRsYWItY29tLnltbA==..1659a47a6f6f538d5134ebfa639935756753c4c0_Z2l0bGFiLWNpLWNvbmZpZy9naXRsYWItY29tLnltbA== 100644
--- a/gitlab-ci-config/gitlab-com.yml
+++ b/gitlab-ci-config/gitlab-com.yml
@@ -27,6 +27,12 @@
       - $DEPS_PIPELINE || $CACHE_UPDATE || $DEPENDENCY_SCANNING
       - $CI_COMMIT_REF_NAME =~ /^[0-9]+-[0-9]+-auto-deploy-[0-9]+$/
 
+.com-branches-except-trigger: &com-branches-except-trigger
+  only:
+    - branches@gitlab-org/omnibus-gitlab
+    - branches@gitlab-org/security/omnibus-gitlab
+  <<: *com-except-triggers
+
 .com-trigger-only: &com-trigger-only
   only:
     - triggers@gitlab-org/build/omnibus-gitlab-mirror
@@ -135,6 +141,4 @@
   retry: 1
 
 .trigger-job:
-  extends: .gems-cache
-  image: "${RUBY_IMAGE}"
   stage: trigger-package
@@ -140,2 +144,21 @@
   stage: trigger-package
+  inherit:
+    variables: false
+  variables:
+    ALTERNATIVE_SOURCES: 'true'
+    BUILDER_IMAGE_REVISION: ${BUILDER_IMAGE_REVISION}
+    BUILDER_IMAGE_REGISTRY: ${BUILDER_IMAGE_REGISTRY}
+    PUBLIC_BUILDER_IMAGE_REGISTRY: ${PUBLIC_BUILDER_IMAGE_REGISTRY}
+    COMPILE_ASSETS: ${COMPILE_ASSETS}
+    GITLAB_VERSION: ${GITLAB_VERSION}
+    GITLAB_SHELL_VERSION: ${GITLAB_SHELL_VERSION}
+    GITLAB_PAGES_VERSION: ${GITLAB_PAGES_VERSION}
+    GITALY_VERSION: ${GITALY_SERVER_VERSION}
+    GITLAB_ELASTICSEARCH_INDEXER_VERSION: ${GITLAB_ELASTICSEARCH_INDEXER_VERSION}
+    GITLAB_KAS_VERSION: ${GITLAB_KAS_VERSION}
+    TOP_UPSTREAM_SOURCE_PROJECT: ${TOP_UPSTREAM_SOURCE_PROJECT}
+    TOP_UPSTREAM_SOURCE_JOB: ${TOP_UPSTREAM_SOURCE_JOB}
+    TOP_UPSTREAM_SOURCE_SHA: ${TOP_UPSTREAM_SOURCE_SHA}
+    TOP_UPSTREAM_SOURCE_REF: ${TOP_UPSTREAM_SOURCE_REF}
+    QA_BRANCH: ${QA_BRANCH}
   when: manual
@@ -141,22 +164,16 @@
   when: manual
-  script:
-    - support/wait_for_sha
-    - bundle exec rake build:trigger
-  only:
-    - branches@gitlab-org/omnibus-gitlab
-    - branches@gitlab-org/security/omnibus-gitlab
-  except:
-    refs:
-      - triggers
-      - /^deps/
-      - /(^docs[\/-].*|.*-docs$)/
-    variables:
-      - $DEPS_PIPELINE || $CACHE_UPDATE || $DEPENDENCY_SCANNING
-      - $CI_COMMIT_REF_NAME =~ /^[0-9]+-[0-9]+-auto-deploy-[0-9]+$/
-  needs: []
-  timeout: 3h
+  trigger:
+    project: 'gitlab-org/build/omnibus-gitlab-mirror'
+    branch: $CI_COMMIT_REF_NAME
+    strategy: depend
+  <<: *com-branches-except-trigger
+  needs:
+    - job: generate-facts
+      artifacts: true
+    - job: check-for-sha-in-mirror
+      artifacts: false
 
 .trigger-pipeline:
   stage: trigger-qa
   image: "${RUBY_IMAGE}"
   when: manual
@@ -158,8 +175,9 @@
 
 .trigger-pipeline:
   stage: trigger-qa
   image: "${RUBY_IMAGE}"
   when: manual
+  allow_failure: true
   <<: *com-trigger-only
   needs:
     - job: Trigger:package
@@ -244,6 +262,16 @@
 #     Branch pipeline     #
 ###########################
 
+check-for-sha-in-mirror:
+  extends: .gems-cache
+  stage: check
+  image: "${RUBY_IMAGE}"
+  script:
+    - support/wait_for_sha
+  <<: *com-branches-except-trigger
+  timeout: 3h
+  needs: []
+
 Trigger:ce-package:
   extends: .trigger-job
 
@@ -446,7 +474,6 @@
   image: "${BUILDER_IMAGE_REGISTRY}/ubuntu_20.04:${BUILDER_IMAGE_REVISION}"
   stage: trigger-package
   script:
-    - if [ -n "$TRIGGERED_USER" ] && [ -n "$TRIGGER_SOURCE" ]; then echo "Pipeline triggered by $TRIGGERED_USER at $TRIGGER_SOURCE"; fi
     - *build-package
     # Renaming so we can easily generate the artifact URL
     - mv pkg/ubuntu-focal/*.deb pkg/ubuntu-focal/gitlab.deb
@@ -484,7 +511,6 @@
     - .gems-cache
   stage: trigger-docker
   script:
-    - if [ -n "$TRIGGERED_USER" ] && [ -n "$TRIGGER_SOURCE" ]; then echo "Pipeline triggered by $TRIGGERED_USER at $TRIGGER_SOURCE"; fi
     - bundle exec rake docker:build:image
     - bundle exec rake docker:push:triggered
   <<: *com-trigger-only
@@ -501,7 +527,6 @@
     - .gems-cache
   stage: trigger-docker
   script:
-    - if [ -n "$TRIGGERED_USER" ] && [ -n "$TRIGGER_SOURCE" ]; then echo "Pipeline triggered by $TRIGGERED_USER at $TRIGGER_SOURCE"; fi
     - bundle exec rake qa:build
     - bundle exec rake qa:push:triggered
   <<: *com-trigger-only
@@ -551,7 +576,6 @@
   extends: .docker_job
   stage: trigger-qa
   script:
-    - if [ -n "$TRIGGERED_USER" ] && [ -n "$TRIGGER_SOURCE" ]; then echo "Pipeline triggered by $TRIGGERED_USER at $TRIGGER_SOURCE"; fi
     - echo "${CI_REGISTRY_PASSWORD}" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
     - curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
     - chmod +x /usr/local/bin/docker-compose
@@ -565,6 +589,7 @@
   stage: trigger-qa
   image: "${RUBY_IMAGE}"
   when: manual
+  allow_failure: true
   script:
     - bundle exec rake qa:rat:trigger
   <<: *com-trigger-only
diff --git a/lib/gitlab/build/facts.rb b/lib/gitlab/build/facts.rb
index b3632046d62e24e1687b01c9633505475f17aec5_bGliL2dpdGxhYi9idWlsZC9mYWN0cy5yYg==..1659a47a6f6f538d5134ebfa639935756753c4c0_bGliL2dpdGxhYi9idWlsZC9mYWN0cy5yYg== 100644
--- a/lib/gitlab/build/facts.rb
+++ b/lib/gitlab/build/facts.rb
@@ -20,9 +20,10 @@
         env_vars = []
         env_vars += common_vars
         env_vars += qa_trigger_vars
+        env_vars += omnibus_trigger_vars
 
         File.write("build_facts/env_vars", env_vars.join("\n"))
       end
 
       def common_vars
         %W[
@@ -23,13 +24,13 @@
 
         File.write("build_facts/env_vars", env_vars.join("\n"))
       end
 
       def common_vars
         %W[
-          TOP_UPSTREAM_SOURCE_PROJECT=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_PROJECT')}
-          TOP_UPSTREAM_SOURCE_REF=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_REF')}
-          TOP_UPSTREAM_SOURCE_JOB=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_JOB')}
-          TOP_UPSTREAM_SOURCE_SHA=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_SHA')}
+          TOP_UPSTREAM_SOURCE_PROJECT=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_PROJECT') || Gitlab::Util.get_env('CI_PROJECT_PATH')}
+          TOP_UPSTREAM_SOURCE_REF=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_REF') || Gitlab::Util.get_env('CI_COMMIT_REF_NAME')}
+          TOP_UPSTREAM_SOURCE_JOB=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_JOB') || Gitlab::Util.get_env('CI_JOB_URL')}
+          TOP_UPSTREAM_SOURCE_SHA=#{Gitlab::Util.get_env('TOP_UPSTREAM_SOURCE_SHA') || Gitlab::Util.get_env('CI_COMMIT_SHA')}
           TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID=#{Gitlab::Util.get_env('TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID')}
           TOP_UPSTREAM_MERGE_REQUEST_IID=#{Gitlab::Util.get_env('TOP_UPSTREAM_MERGE_REQUEST_IID')}
         ]
@@ -47,6 +48,16 @@
         ]
       end
 
+      def omnibus_trigger_vars
+        version_vars
+      end
+
+      def version_vars
+        Gitlab::Version::COMPONENTS_ENV_VARS.values.uniq.map do |version|
+          "#{version}=#{Gitlab::Util.get_env(version)}"
+        end
+      end
+
       private
 
       def generate_knapsack_report?
diff --git a/lib/gitlab/util.rb b/lib/gitlab/util.rb
index b3632046d62e24e1687b01c9633505475f17aec5_bGliL2dpdGxhYi91dGlsLnJi..1659a47a6f6f538d5134ebfa639935756753c4c0_bGliL2dpdGxhYi91dGlsLnJi 100644
--- a/lib/gitlab/util.rb
+++ b/lib/gitlab/util.rb
@@ -2,7 +2,9 @@
   class Util
     class << self
       def get_env(key)
-        ENV[key]&.strip
+        value = ENV[key]&.strip
+
+        value unless value&.empty?
       end
 
       def set_env(key, value)
diff --git a/spec/gitlab/build/facts_spec.rb b/spec/gitlab/build/facts_spec.rb
index b3632046d62e24e1687b01c9633505475f17aec5_c3BlYy9naXRsYWIvYnVpbGQvZmFjdHNfc3BlYy5yYg==..1659a47a6f6f538d5134ebfa639935756753c4c0_c3BlYy9naXRsYWIvYnVpbGQvZmFjdHNfc3BlYy5yYg== 100644
--- a/spec/gitlab/build/facts_spec.rb
+++ b/spec/gitlab/build/facts_spec.rb
@@ -34,6 +34,7 @@
     before do
       allow(described_class).to receive(:common_vars).and_return(%w[TOP_UPSTREAM_SOURCE_PROJECT=gitlab-org/gitlab])
       allow(described_class).to receive(:qa_trigger_vars).and_return(%w[QA_RELEASE=foobar])
+      allow(described_class).to receive(:version_vars).and_return(%w[GITLAB_VERSION=randombranch])
     end
 
     it 'writes environment variables to file' do
@@ -37,7 +38,7 @@
     end
 
     it 'writes environment variables to file' do
-      expect(File).to receive(:write).with('build_facts/env_vars', "TOP_UPSTREAM_SOURCE_PROJECT=gitlab-org/gitlab\nQA_RELEASE=foobar")
+      expect(File).to receive(:write).with('build_facts/env_vars', "TOP_UPSTREAM_SOURCE_PROJECT=gitlab-org/gitlab\nQA_RELEASE=foobar\nGITLAB_VERSION=randombranch")
 
       described_class.generate_env_file
     end