pipeline { agent any environment { VERSION = '' } stages { stage('Set build number into version') { steps { script { def pom = readFile('pom.xml') def matcher = pom =~ /pf-sdn<\/artifactId>\s*([0-9.]+)<\/version>/ if (!matcher.find()) { error "Project version not found in pom.xml" } def parts = matcher.group(1).tokenize('.') parts[parts.size() - 1] = env.BUILD_NUMBER env.VERSION = parts.join('.') echo "New project version: ${env.VERSION}" sh "mvn -B versions:set -DnewVersion=${env.VERSION}" sh 'mvn -B versions:commit' } } } stage('Maven package') { steps { sh 'mvn -B clean package' } } stage('Build docker image') { steps { sh "docker build -f docker/Dockerfile -t pfsdn:${env.VERSION} ." } } stage('Deploy') { steps { script { echo "Saving docker image pfsdn:${env.VERSION}" sh "docker save pfsdn:${env.VERSION} | gzip > pfsdn-${env.VERSION}.tar.gz" archiveArtifacts artifacts: "pfsdn-${env.VERSION}.tar.gz", fingerprint: true echo "Saving pfapp artifact launcher/target/${env.VERSION}.pfapp" archiveArtifacts artifacts: "launcher/target/${env.VERSION}.pfapp", fingerprint: true echo "TODO: deploy ${env.VERSION}.pfapp to repository (not implemented yet)" } } } } post { always { script { if (env.VERSION ==~ /^\d+\.\d+\.\d+\.\d+$/) { sh "docker rmi pfsdn:${env.VERSION} || true" } } cleanWs() } } }