#!groovy /** * Jenkins pipeline to build Corda on MS Windows server. * Because it takes a long time to run tests sequentially, unit tests and * integration tests are started in parallel on separate agents. * * Additionally, pull requests by default run only unit tests. */ /** * Kill already started job. * Assume new commit takes precendence and results from previous * unfinished builds are not required. * This feature doesn't play well with disableConcurrentBuilds() option */ @Library('corda-shared-build-pipeline-steps') import static com.r3.build.BuildControl.killAllExistingBuildsForJob killAllExistingBuildsForJob(env.JOB_NAME, env.BUILD_NUMBER.toInteger()) /** * Sense environment */ boolean isReleaseBranch = (env.BRANCH_NAME =~ /^release\/os\/.*/) pipeline { agent none options { ansiColor('xterm') timestamps() timeout(time: 3, unit: 'HOURS') buildDiscarder(logRotator(daysToKeepStr: '14', artifactDaysToKeepStr: '14')) /* * a bit awkward to read * is parameter is true -> push events are *not* ignored * if parameter is false -> push events *are* ignored */ overrideIndexTriggers (!isReleaseBranch) } parameters { booleanParam defaultValue: (isReleaseBranch), description: 'Run integration tests?', name: 'DO_INTEGRATION_TESTS' } /* * Do no receive Github's push events for release branches -> suitable for nightly builds * but projects for pull requests will receive them as normal, and PR builds are started ASAP */ triggers { pollSCM ignorePostCommitHooks: isReleaseBranch, scmpoll_spec: '@midnight' } stages { stage('Tests') { parallel { stage('Unit Tests') { agent { label 'mswin' } steps { authenticateGradleWrapper() bat "./gradlew --no-daemon " + "--stacktrace " + "-Pcompilation.warningsAsErrors=false " + "-Ptests.failFast=true " + "clean test" } post { always { archiveArtifacts allowEmptyArchive: true, artifacts: '**/logs/**/*.log' junit testResults: '**/build/test-results/**/*.xml', keepLongStdio: true bat '.ci/kill_corda_procs.cmd' } cleanup { deleteDir() /* clean up our workspace */ } } } stage('Integration Tests') { when { expression { params.DO_INTEGRATION_TESTS } beforeAgent true } agent { label 'mswin' } steps { bat "./gradlew --no-daemon " + "clean integrationTest" } post { always { archiveArtifacts allowEmptyArchive: true, artifacts: '**/logs/**/*.log' junit testResults: '**/build/test-results/**/*.xml', keepLongStdio: true bat '.ci/kill_corda_procs.cmd' } cleanup { deleteDir() /* clean up our workspace */ } } } } } } }