corda/.ci/dev/mswin/Jenkinsfile
2020-07-21 15:50:21 +01:00

102 lines
3.5 KiB
Groovy

#!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 {
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 */
}
}
}
}
}
}
}