node { stage 'Clone the project' git 'https://github.com/eugenp/tutorials.git' dir('spring-jenkins-pipeline') { stage("Compilation and Analysis") { parallel 'Compilation': { if (isUnix()) { sh "./mvnw clean install -DskipTests" } else { bat "./mvnw.cmd clean install -DskipTests" } }, 'Static Analysis': { stage("Checkstyle") { if (isUnix()) { sh "./mvnw checkstyle:checkstyle" } else { bat "./mvnw.cmd checkstyle:checkstyle" } step([$class: 'CheckStylePublisher', canRunOnFailed: true, defaultEncoding: '', healthy: '100', pattern: '**/target/checkstyle-result.xml', unHealthy: '90', useStableBuildAsReference: true ]) } } } stage("Tests and Deployment") { parallel 'Unit tests': { stage("Running unit tests") { try { if (isUnix()) { sh "./mvnw test -Punit" } else { bat "./mvnw.cmd test -Punit" } } catch(err) { step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*UnitTest.xml']) throw err } step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*UnitTest.xml']) } }, 'Integration tests': { stage("Running integration tests") { try { if (isUnix()) { sh "./mvnw test -Pintegration" } else { bat "./mvnw.cmd test -Pintegration" } } catch(err) { step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*IntegrationTest.xml']) throw err } step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*IntegrationTest.xml']) } } stage("Staging") { if (isUnix()) { sh "pid=\$(lsof -i:8989 -t); kill -TERM \$pid || kill -KILL \$pid" } else { bat "FOR /F \"tokens=5 delims= \" %%G IN (\"netstat -a | findstr :8989\") DO TaskKill.exe /PID %%G /fi \"memusage gt 0\"" } withEnv(['JENKINS_NODE_COOKIE=dontkill']) { if (isUnix()) { sh 'nohup ./mvnw spring-boot:run -Dserver.port=8989 &' } else { bat 'start mvnw.cmd spring-boot:run -Dserver.port=8989' } } } } } }