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