104 lines
3.2 KiB
Groovy
104 lines
3.2 KiB
Groovy
@groovy.transform.Field String VERSION
|
|
|
|
@NonCPS
|
|
String extractBaseVersion(String pom) {
|
|
def matcher = pom =~ /<artifactId>pf-sdn<\/artifactId>\s*<version>([0-9.]+)<\/version>/
|
|
return matcher.find() ? matcher.group(1) : null
|
|
}
|
|
|
|
|
|
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
NEXUS_URL = 'http://172.16.0.59:8001'
|
|
NEXUS_CREDENTIALS_ID = 'nexus_cred'
|
|
}
|
|
|
|
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 verify'
|
|
}
|
|
}
|
|
|
|
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"
|
|
}
|
|
}
|
|
|
|
stage('Push docker image to Nexus') {
|
|
steps {
|
|
script {
|
|
def nexusHost = NEXUS_URL
|
|
.replaceAll(/^https?:\/\//, '')
|
|
.replaceAll(/\/+$/, '')
|
|
def nexusImage = "${nexusHost}/pfsdn:${VERSION}"
|
|
|
|
withCredentials([usernamePassword(
|
|
credentialsId: NEXUS_CREDENTIALS_ID,
|
|
usernameVariable: 'NEXUS_USER',
|
|
passwordVariable: 'NEXUS_PASS'
|
|
)]) {
|
|
sh """
|
|
echo "\${NEXUS_PASS}" | docker login ${nexusHost} -u "\${NEXUS_USER}" --password-stdin
|
|
docker tag pfsdn:${VERSION} ${nexusImage}
|
|
docker push ${nexusImage}
|
|
docker rmi ${nexusImage} || true
|
|
docker rmi pfsdn:${VERSION} || true
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Deploy') {
|
|
steps {
|
|
script {
|
|
|
|
archiveArtifacts artifacts: "pfsdn-${VERSION}.tar.gz", fingerprint: true
|
|
|
|
echo "Saving pfapp artifact ${VERSION}.pfapp"
|
|
archiveArtifacts artifacts: "launcher/target/${VERSION}.pfapp", fingerprint: true
|
|
|
|
echo "TODO: deploy ${VERSION}.pfapp to repository (not implemented yet)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
sh "docker rmi pfsdn:${VERSION} || true"
|
|
}
|
|
success {
|
|
cleanWs()
|
|
}
|
|
}
|
|
}
|