diff --git a/utils/ci/Jenkinsfile.e2e b/utils/ci/Jenkinsfile.e2e
new file mode 100644
index 0000000000000000000000000000000000000000..e9a4f3ee363f319f11b8012a2ce6332b32af78fd
--- /dev/null
+++ b/utils/ci/Jenkinsfile.e2e
@@ -0,0 +1,79 @@
+/********************************************************************************
+ * Copyright (c) 2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ ********************************************************************************/
+
+pipeline {
+  agent none
+  parameters {
+    string(name: 'OPTESTRUNNER_URL', defaultValue: 'https://ci.eclipse.org/openpass/job/opTestrunner/job/add-invocations-random-seed/1/artifact/repo/plugin/optestrunner/dist/pytest_optestrunner-1.1-py3-none-any.whl', description: 'URL to download opTestrunner binaries')
+    string(name: 'GECCO_URL', defaultValue: 'https://ci.eclipse.org/openpass/job/gecco/view/change-requests/job/MR-4/3/artifact/artifacts/gecco.tar.gz', description: 'URL to download gecco binaries')
+    string(name: 'GTGEN_CLI_URL', defaultValue: 'https://ci.eclipse.org/openpass/job/GT-Gen-Simulator-PreMerge-Gate/view/tags/job/v11.3.0/lastSuccessfulBuild/artifact/artifacts/gtgen-cli_1.1.0_amd64.deb', description: 'URL to download gtgen cli binaries')
+    string(name: 'GTGEN_SIM_URL', defaultValue: 'https://ci.eclipse.org/openpass/job/GT-Gen-Simulator-PreMerge-Gate/view/tags/job/v11.3.0/lastSuccessfulBuild/artifact/artifacts/gtgen-simulator_11.3.0_amd64.deb', description: 'URL to download gtgen simulator binaries')
+  }
+  options {
+    checkoutToSubdirectory('repo')
+    timeout(time: 10, unit: 'HOURS')
+    timestamps()
+    disableConcurrentBuilds(abortPrevious: true)
+    buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '2'))
+  }
+  stages {
+    stage('Run E2E tests') {
+      parallel {
+        stage('Linux') {
+          agent {
+            kubernetes {
+              customWorkspace 'ope2e'
+              yamlFile 'utils/ci/openpassAgentPod.yaml'
+            }
+          }
+          environment {
+            PYTHON_EXECUTABLE = 'python3'
+          }
+          stages {
+            stage('Linux: Cleanup') {
+              steps {
+                container('openpass-build') {
+                  sh 'bash repo/utils/ci/scripts/10_prepare.sh'
+                }
+              }
+            }
+            stage('Linux: Fetch binaries') {
+              steps {
+                container('openpass-build') {
+                  sh 'bash repo/utils/ci/scripts/pull_gecco.sh'
+                  sh 'bash repo/utils/ci/scripts/pull_optestrunner.sh'
+                  // sh 'bash repo/utils/ci/scripts/pull_gtgen.sh'
+                  sh 'bash repo/utils/ci/scripts/build_gtgen.sh'
+                }
+              }
+            }
+            stage('Linux: Run E2E') {
+              steps {
+                container('openpass-build') {
+                  sh 'bash repo/utils/ci/scripts/run_gtgen.sh'
+                  sh 'bash repo/utils/ci/scripts/55_endtoend.sh'
+                }
+              }
+            }
+          }
+          post {
+            always {
+              script {
+                sh 'bash repo/utils/ci/scripts/90_pack_artifacts.sh'
+                archiveArtifacts allowEmptyArchive: true, artifacts: 'artifacts/**', followSymlinks: false
+                junit allowEmptyResults: true, testResults: 'build/**/*Tests.xml,repo/sim/tests/endToEndTests/pyOpenPASS/result_*.xml'
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}