pf-sdn/Jenkinsfile

69 lines
2.1 KiB
Groovy

@groovy.transform.Field String VERSION
pipeline {
agent any
stages {
stage('Set build number into version') {
steps {
script {
def pom = readFile('pom.xml')
def matcher = pom =~ /<artifactId>pf-sdn<\/artifactId>\s*<version>([0-9.]+)<\/version>/
if (!matcher.find()) {
error "Project version not found in pom.xml"
}
def baseVersion = matcher.group(1)
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}"
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:${VERSION} ."
}
}
stage('Deploy') {
steps {
script {
echo "Saving docker image pfsdn:${VERSION}"
sh "docker save pfsdn:${VERSION} | gzip > pfsdn-${VERSION}.tar.gz"
archiveArtifacts artifacts: "pfsdn-${VERSION}.tar.gz", fingerprint: true
echo "Saving pfapp artifact launcher/target/${VERSION}.pfapp"
archiveArtifacts artifacts: "launcher/target/${VERSION}.pfapp", fingerprint: true
echo "TODO: deploy ${VERSION}.pfapp to repository (not implemented yet)"
}
}
}
}
post {
always {
script {
if (VERSION ==~ /^\d+\.\d+\.\d+\.\d+$/) {
sh "docker rmi pfsdn:${VERSION} || true"
}
}
cleanWs()
}
}
}