diff --git a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
index b182643850812e5adb6fafe525d0b5b5fe56ab5f..efaac224a939a3fbb514503bf50a1a5bc9bf2c28 100644
--- a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
+++ b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
@@ -48,6 +48,11 @@ include:
         - ".gitlab/ci/test-on-gdk/**"
         - "lib/gitlab/database/load_balancing/**/*"
 
+.rules:test:gdk-gitaly-version-change:
+  rules:
+    changes:
+      - "GITALY_SERVER_VERSION"
+
 .with-parallel:
   parallel: 15
 
@@ -83,7 +88,7 @@ include:
     GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN
     FF_NETWORK_PER_BUILD: "true"
     RSPEC_LAST_RUN_RESULTS_FILE: "$CI_PROJECT_DIR/qa/tmp/examples.txt"
-    COVERBAND_ENABLED: "$COVERBAND_ENABLED" # explicitly define variable so it is passed in to gdk service container
+    COVERBAND_ENABLED: "$COVERBAND_ENABLED"  # explicitly define variable so it is passed in to gdk service container
   before_script:
     - echo "SUITE_RAN=true" > "$QA_SUITE_STATUS_ENV_FILE"
     - echo -e "\e[0Ksection_start:`date +%s`:install_gems[collapsed=true]\r\e[0KInstall gems"
@@ -157,6 +162,14 @@ gdk-qa-blocking-selective:
     QA_SCENARIO: Test::Instance::Blocking
     QA_RUN_TYPE: gdk-qa-blocking
 
+gdk-qa-blocking-gitaly-transactions:
+  extends: gdk-qa-blocking
+  variables:
+    QA_GITALY_TRANSACTIONS_ENABLED: "true"
+  rules:
+    - !reference [.rules:test:never-schedule-pipeline, rules]
+    - !reference [.rules:test:gdk-gitaly-version-change, rules]
+
 # ------------------------------------------
 # Non Blocking tests
 # ------------------------------------------
diff --git a/qa/gdk/entrypoint b/qa/gdk/entrypoint
index aefd5875e663c6a5c8acdc190dd2b42faf6e7f43..1de341976bc14ea126009973e7f7b39c29ec67a1 100755
--- a/qa/gdk/entrypoint
+++ b/qa/gdk/entrypoint
@@ -11,10 +11,16 @@ if [[ "${WITH_LOAD_BALANCER}" == "true" ]]; then
   gdk reconfigure
 fi
 
-gdk start
+if [[ "${QA_GITALY_TRANSACTIONS_ENABLED}" == "true" ]]; then
+  gdk config set gitaly.transactions.enabled true
+  gdk config set praefect.enabled false
+  gdk reconfigure
+fi
 
 # Split logs in to multiple files when running in CI
 if [ -z "$CI" ]; then
+  gdk start
+
   exec "$@" | tee -a ${HOME}/gitlab-development-kit/gitlab/log/gdk-container.log
 else
   logs=("gitaly" "gitlab-workhorse" "postgresql" "rails-background-jobs" "redis" "sshd" "vite" "rails-web" "webpack")
@@ -27,5 +33,7 @@ else
     tail -f $logfile &>${CI_BUILDS_DIR}/$(basename $logfile) &
   done
 
+  gdk start
+
   exec "$@"
 fi