diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000000..49b3ca6686
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,64 @@
+killall_jobs()
+
+pipeline {
+    agent { label 'k8s' }
+    environment {
+        DOCKER_TAG_TO_USE = "${UUID.randomUUID().toString().toLowerCase().subSequence(0, 12)}"
+        EXECUTOR_NUMBER = "${env.EXECUTOR_NUMBER}"
+        BUILD_ID = "${env.BUILD_ID}-${env.JOB_NAME}"
+    }
+
+    stages {
+        stage('Corda Pull Request Integration Tests - Generate Build Image') {
+            steps {
+                withCredentials([string(credentialsId: 'container_reg_passwd', variable: 'DOCKER_PUSH_PWD')]) {
+                    sh "./gradlew " +
+                            "-Dkubenetize=true " +
+                            "-Ddocker.push.password=\"\${DOCKER_PUSH_PWD}\" " +
+                            "-Ddocker.work.dir=\"/tmp/\${EXECUTOR_NUMBER}\" " +
+                            "-Ddocker.provided.tag=\"\${DOCKER_TAG_TO_USE}\"" +
+                            " clean pushBuildImage"
+                }
+            }
+        }
+        stage('Corda Pull Request Integration Tests - Run Integration Tests') {
+            steps {
+                withCredentials([string(credentialsId: 'container_reg_passwd', variable: 'DOCKER_PUSH_PWD')]) {
+                    sh "./gradlew " +
+                            "-DbuildId=\"\${BUILD_ID}\" " +
+                            "-Ddocker.push.password=\"\${DOCKER_PUSH_PWD}\" " +
+                            "-Dkubenetize=true " +
+                            "-Ddocker.tag=\"\${DOCKER_TAG_TO_USE}\"" +
+                            " allParallelIntegrationTest"
+                }
+                junit '**/build/test-results-xml/**/*.xml'
+            }
+        }
+
+        stage('Clear testing images') {
+            steps {
+                sh """docker rmi -f \$(docker images | grep \${DOCKER_TAG_TO_USE} | awk '{print \$3}') || echo \"there were no images to delete\""""
+            }
+        }
+    }
+}
+
+@NonCPS
+def killall_jobs() {
+    def jobname = env.JOB_NAME
+    def buildnum = env.BUILD_NUMBER.toInteger()
+
+    def job = Jenkins.instance.getItemByFullName(jobname)
+    for (build in job.builds) {
+        if (!build.isBuilding()) {
+            continue;
+        }
+
+        if (buildnum == build.getNumber().toInteger()) {
+            continue
+        }
+
+        echo "Killing task = ${build}"
+        build.doStop();
+    }
+}
\ No newline at end of file
diff --git a/buildSrc/src/main/groovy/net/corda/testing/ImageBuilding.groovy b/buildSrc/src/main/groovy/net/corda/testing/ImageBuilding.groovy
index 5497bb8c25..54f6e91f74 100644
--- a/buildSrc/src/main/groovy/net/corda/testing/ImageBuilding.groovy
+++ b/buildSrc/src/main/groovy/net/corda/testing/ImageBuilding.groovy
@@ -86,7 +86,7 @@ class ImageBuilding implements Plugin<Project> {
         DockerTagImage tagBuildImageResult = project.tasks.create('tagBuildImageResult', DockerTagImage) {
             dependsOn commitBuildImageResult
             imageId = commitBuildImageResult.getImageId()
-            tag = "${UUID.randomUUID().toString().toLowerCase().subSequence(0, 12)}"
+            tag = System.getProperty("docker.provided.tag") ? System.getProperty("docker.provided.tag") :  "${UUID.randomUUID().toString().toLowerCase().subSequence(0, 12)}"
             repository = "stefanotestingcr.azurecr.io/testing"
         }