diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e97af16f6b55160c16bbee406d013f17f6292036..90a517c3332a0b1969c22c3d37513561a4658888 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -679,6 +679,7 @@ oe-selftest-report:
             python3 $CI_PROJECT_DIR/gcc-result-parser.py $sum_file
           done
           # Upload result to squad.
+          gcc_version="$(cat gcc_version)"
           for result_file in $(ls result_*.json); do
             component="$(basename $result_file .json | cut -d'_' -f2-)"
             job_id="$job-$component"
@@ -686,7 +687,7 @@ oe-selftest-report:
               --header "Auth-Token: $CI_SQUAD_TOKEN" \
               https://squadp.svc.ostc-eu.dev/api/submit/oniro-core/gcc-test/$CI_PIPELINE_ID/$test_env \
               --form tests=@$result_file \
-              --form metadata='{"job_id": "'$job_id'"}'
+              --form "metadata={\"job_id\": \"$job_id\", \"gcc_version\": \"$gcc_version\"}"
           done
         )
       done
diff --git a/.oniro-ci/build-generic.yaml b/.oniro-ci/build-generic.yaml
index d9e09c23f9c0b1fe58ce0a31c3d3344b7c582c8a..2190c7d24524936115c71b5e5a853749fed674f5 100644
--- a/.oniro-ci/build-generic.yaml
+++ b/.oniro-ci/build-generic.yaml
@@ -485,6 +485,7 @@
     CI_ONIRO_BB_LOCAL_CONF_RUNTIME: "gnu"
     CI_ONIRO_OE_SELFTESTS: ""
     CI_ONIRO_OE_SEFLTEST_SKIPS: ""
+    CI_SQUAD_INSTANCE: "https://squadp.svc.ostc-eu.dev"
     # The USER variable is required by oe-selftest but missing in env.
     USER: "builder"
     ARTIFACTS_DIR: "$CI_PROJECT_DIR/artifacts/$CI_JOB_NAME"
@@ -493,6 +494,19 @@
         echo "nothing to test - CI_ONIRO_OE_SELFTESTS is empty"
         && exit 1 )
     - !reference [.bitbake-workspace, script]
+    # Only run tests when gcc version changed.
+    - gcc_version="$(bitbake -s | grep '^gcc-runtime' | awk -F':' '{print $NF}' | head -1 | awk '{$1=$1;print}')"
+    - echo "Current GCC version $gcc_version"
+    - last_build_id="$(curl --silent $CI_SQUAD_INSTANCE/api/projects/5/builds/ | jq -r '.results | .[] | .id' | head -1)"
+    - last_tested_gcc_version="$(curl --silent $CI_SQUAD_INSTANCE/api/builds/$last_build_id/metadata/ | jq -r '.gcc_version')"
+    - echo "The last tested GCC version $last_tested_gcc_version"
+    - |
+      if [ "$gcc_version" != "$last_tested_gcc_version" ]; then
+        echo "GCC verion changed, about to test the new version ..."
+      else
+        echo "GCC verion not changed, skipping gcc tests ..."
+        exit 0
+      fi
     # oe-selftest inherits the current 'build/conf/local.conf' to create
     # '../build-st/conf/local.conf' for qemu image building. Adding the
     # MACHINE variable to the current local conf allows test job to customize
@@ -504,6 +518,7 @@
     - find ../build-st \( -name "*.sum" -o -name "*.log" \) \( -path "*/gcc-runtime/*testsuite*" \)
         -exec cp --verbose {} "$ARTIFACTS_DIR" \;
     - for file in $(find "$ARTIFACTS_DIR" -type f); do xz $file; done
+    - echo "$gcc_version" > $ARTIFACTS_DIR/gcc_version
     - rm -rf ../build-st
   artifacts:
     paths: