diff --git a/substrate/.config/nextest.toml b/substrate/.config/nextest.toml
index c111b0abeb7a2f13f5ae2fb358a9ccee320d53cb..eb0ed09cad92ba0286a64e7c65d5b24e39f191f3 100644
--- a/substrate/.config/nextest.toml
+++ b/substrate/.config/nextest.toml
@@ -16,7 +16,7 @@ dir = "target/nextest"
 # * retries = 3
 # * retries = { backoff = "fixed", count = 2, delay = "1s" }
 # * retries = { backoff = "exponential", count = 10, delay = "1s", jitter = true, max-delay = "10s" }
-retries = 0
+retries = 5
 
 # The number of threads to run tests with. Supported values are either an integer or
 # the string "num-cpus". Can be overridden through the `--test-threads` option.
@@ -89,12 +89,12 @@ leak-timeout = "100ms"
 # Output a JUnit report into the given file inside 'store.dir/<profile-name>'.
 # If unspecified, JUnit is not written out.
 
-# path = "junit.xml"
+path = "junit.xml"
 
 # The name of the top-level "report" element in JUnit report. If aggregating
 # reports across different test runs, it may be useful to provide separate names
 # for each report.
-report-name = "nextest-run"
+report-name = "substrate"
 
 # Whether standard output and standard error for passing tests should be stored in the JUnit report.
 # Output is stored in the <system-out> and <system-err> elements of the <testcase> element.
diff --git a/substrate/scripts/ci/gitlab/pipeline/test.yml b/substrate/scripts/ci/gitlab/pipeline/test.yml
index 52130f5b7bf7d63c643f20fb1ff10b1f8e90f9dd..29f21bfe59e72492eae99b7f738f7566831db634 100644
--- a/substrate/scripts/ci/gitlab/pipeline/test.yml
+++ b/substrate/scripts/ci/gitlab/pipeline/test.yml
@@ -228,6 +228,28 @@ test-linux-stable:
       --partition count:${CI_NODE_INDEX}/${CI_NODE_TOTAL}
     # we need to update cache only from one job
     - if [ ${CI_NODE_INDEX} == 1 ]; then rusty-cachier cache upload; fi
+  artifacts:
+    when: always
+    paths:
+      - target/nextest/default/junit.xml
+    reports:
+      junit: target/nextest/default/junit.xml
+
+test-linux-stable-upload-test-results:
+  stage: test
+  needs:
+    - job: test-linux-stable
+      artifacts: true
+  extends:
+    - .docker-env
+    - .test-refs
+  script:
+    - cat target/nextest/default/junit.xml | xq . > target/nextest/default/junit.json
+    - "curl -v -XPOST --http1.1
+      -u ${ELASTIC_USERNAME}:${ELASTIC_PASSWORD}
+      https://elasticsearch.parity-build.parity.io/unit-tests/_doc/${CI_JOB_ID}
+      -H 'Content-Type: application/json'
+      -d @target/nextest/default/junit.json"
 
 test-frame-support:
   stage: test