pipeline { agent any environment { REGISTRY_URL = 'git.winteraccess.id' IMAGE_NAME = 'winter-access/backend_nam' KUBE_NAMESPACE = 'nam-backend-dev' } stages { stage('Checkout') { steps { git branch: 'dev', url: 'https://git.winteraccess.id/winter-access/backend_nam.git' } } stage('Get Short SHA') { steps { script { env.SHORT_SHA = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() } } } stage('Login to Registry') { steps { script { sh "echo ${env.REGISTRY_TOKEN} | docker login ${REGISTRY_URL} --username ${env.REGISTRY_USER} --password-stdin" } } } stage('Build Docker Image') { steps { script { sh """ docker build -t ${REGISTRY_URL}/${IMAGE_NAME}:dev-${SHORT_SHA} \ -t ${REGISTRY_URL}/${IMAGE_NAME}:dev \ -t ${REGISTRY_URL}/${IMAGE_NAME}:latest \ -f src/Dockerfile . """ } } } stage('Push Docker Image') { steps { script { sh """ docker push ${REGISTRY_URL}/${IMAGE_NAME}:dev-${SHORT_SHA} docker push ${REGISTRY_URL}/${IMAGE_NAME}:dev docker push ${REGISTRY_URL}/${IMAGE_NAME}:latest """ } } } stage('SonarQube Analysis') { steps { script { withSonarQubeEnv('SonarQube') { sh 'mvn sonar:sonar' } } } } stage('Setup Kubectl') { steps { script { sh 'kubectl version --client' } } } stage('Create Kubeconfig') { steps { script { sh """ mkdir -p \$HOME/.kube echo "${env.KUBECONFIG}" > \$HOME/.kube/config chmod 600 \$HOME/.kube/config """ } } } stage('Deploy to Kubernetes') { steps { script { sh """ kubectl apply -f deploy/kubernetes/dev.yaml kubectl set image deployment/backend backend=${REGISTRY_URL}/${IMAGE_NAME}:dev-${SHORT_SHA} -n ${KUBE_NAMESPACE} """ } } } } post { always { cleanWs() } } }