114 lines
4.5 KiB
Plaintext
114 lines
4.5 KiB
Plaintext
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
REGISTRY_CREDENTIALS = "docker"
|
|
KUBECONFIG_CREDENTIALS = "k3s-kubeconfig"
|
|
GITEA_CREDENTIALS = "gitea"
|
|
K8S_NAMESPACE = "insurance-system"
|
|
DEPLOYMENT_NAME = "insurance-backend"
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout Code') {
|
|
steps {
|
|
checkout([$class: 'GitSCM',
|
|
branches: [[name: '*/main']],
|
|
userRemoteConfigs: [[
|
|
url: 'https://git.hzwnrw.my/Insurance/insurance-be.git',
|
|
credentialsId: env.GITEA_CREDENTIALS
|
|
]]
|
|
])
|
|
}
|
|
}
|
|
|
|
stage('Increase Version') {
|
|
steps {
|
|
script {
|
|
// disable colors so no CTRL chars pollute version string
|
|
def currentVersion = sh(
|
|
script: "mvn --batch-mode -Dstyle.color=never help:evaluate -Dexpression=project.version -q -DforceStdout",
|
|
returnStdout: true
|
|
).trim()
|
|
echo "Current version: ${currentVersion}"
|
|
|
|
def major = sh(
|
|
script: "mvn --batch-mode -Dstyle.color=never help:evaluate -Dexpression=parsedVersion.majorVersion -q -DforceStdout",
|
|
returnStdout: true
|
|
).trim()
|
|
def minor = sh(
|
|
script: "mvn --batch-mode -Dstyle.color=never help:evaluate -Dexpression=parsedVersion.minorVersion -q -DforceStdout",
|
|
returnStdout: true
|
|
).trim()
|
|
def nextInc = sh(
|
|
script: "mvn --batch-mode -Dstyle.color=never help:evaluate -Dexpression=parsedVersion.nextIncrementalVersion -q -DforceStdout",
|
|
returnStdout: true
|
|
).trim()
|
|
|
|
def newVersion = "${major}.${minor}.${nextInc}-SNAPSHOT"
|
|
echo "New version: ${newVersion}"
|
|
env.NEW_VERSION = newVersion
|
|
|
|
sh """
|
|
mvn --batch-mode -Dstyle.color=never versions:set -DnewVersion=${newVersion} versions:commit
|
|
"""
|
|
|
|
withCredentials([usernamePassword(credentialsId: env.GITEA_CREDENTIALS, usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) {
|
|
sh """
|
|
git config user.name "Jenkins"
|
|
git config user.email "jenkins@hzwnrw.my"
|
|
git add pom.xml
|
|
git commit -m "Auto-increment version to ${newVersion}" || echo "No changes"
|
|
git push https://${GIT_USER}:${GIT_PASS}@git.hzwnrw.my/Insurance/insurance-be.git HEAD:main
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Build & Push Docker Image') {
|
|
steps {
|
|
script {
|
|
sh "mvn clean package -DskipTests -B -Dstyle.color=never"
|
|
|
|
def dockerImage = "hzwnrw/dev:insurance-backend-${env.NEW_VERSION}"
|
|
sh "docker build -t ${dockerImage} ."
|
|
|
|
withCredentials([usernamePassword(credentialsId: env.REGISTRY_CREDENTIALS, usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
|
|
sh "echo ${DOCKER_PASS} | docker login -u ${DOCKER_USER} --password-stdin"
|
|
}
|
|
sh "docker push ${dockerImage}"
|
|
env.DOCKER_IMAGE = dockerImage
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Deploy to K3s') {
|
|
steps {
|
|
script {
|
|
withCredentials([file(credentialsId: env.KUBECONFIG_CREDENTIALS, variable: 'KUBECONFIG')]) {
|
|
sh """
|
|
kubectl --kubeconfig=$KUBECONFIG set image deployment/${DEPLOYMENT_NAME} ${DEPLOYMENT_NAME}=${DOCKER_IMAGE} -n ${K8S_NAMESPACE}
|
|
kubectl --kubeconfig=$KUBECONFIG rollout status deployment/${DEPLOYMENT_NAME} -n ${K8S_NAMESPACE}
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Cleanup') {
|
|
steps {
|
|
sh "docker image prune -f || true"
|
|
sh "docker builder prune -f || true"
|
|
sh "mvn clean -B -Dstyle.color=never || true"
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
cleanWs()
|
|
}
|
|
}
|
|
}
|