From 4ef032071d7c75a921b00a0a63bbdbfb9f22b8c7 Mon Sep 17 00:00:00 2001 From: Stefano Franz Date: Mon, 16 Sep 2019 10:29:58 +0000 Subject: [PATCH] Add Jenkinsfile for integration into CI (#5468) * remove compiler xml * add Jenkinsfile to enable scanning * trigger build * add ability to specify what docker tag to use from outside of the build * fix docker work dir * fix pipeline syntax issues * use environment rather than `def` * move agent restrictor outside of stages block * use steps block * more pipeline syntax fixes * even more pipeline syntax fixes * even more pipeline syntax fixes * add kubenetize as property to image build * move clear of docker image to end of build rather than start to prevent colocated builds * escape dollar on docker image remove command * attempt to kill all existing jobs * fix compile issue due to killall_jobs * fix compile issue due to killall_jobs pt2 * fix spelling * make all variables environment variables --- Jenkinsfile | 64 +++++++++++++++++++ .../net/corda/testing/ImageBuilding.groovy | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Jenkinsfile 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 { 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" }