pipeline { agent { kubernetes { cloud 'k3s-jenkins-agents' label 'docker-agent' defaultContainer 'docker-cli' } } stages { stage('Checkout') { steps { echo '✅ Code checked out from gitea' } } stage('Build Docker Image') { steps { sh ''' docker build -t management-platform:${BUILD_NUMBER} -t management-platform:latest ./platform/ echo "✅ Docker image built" docker images management-platform:${BUILD_NUMBER} --format "Size: {{.Size}}" ''' } } stage('SonarQube Analysis') { steps { container('sonar-scanner') { withSonarQubeEnv('sonarqube') { script { def scannerHome = tool 'sonar-scanner' sh """ ${scannerHome}/bin/sonar-scanner \ -Dsonar.projectKey=management-platform \ -Dsonar.sources=platform \ -Dsonar.python.version=3 """ } } } } } stage('Deploy to Kubernetes') { steps { container('docker-cli') { sh ''' docker save management-platform:${BUILD_NUMBER} | \ /usr/local/bin/k3s ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images import - set +x TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) CACERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt /usr/local/bin/k3s kubectl --server=https://kubernetes.default.svc \ --token="$TOKEN" --certificate-authority="$CACERT" \ set image deployment/management-platform \ management-platform=management-platform:${BUILD_NUMBER} \ -n management-platform /usr/local/bin/k3s kubectl --server=https://kubernetes.default.svc \ --token="$TOKEN" --certificate-authority="$CACERT" \ rollout status deployment/management-platform -n management-platform --timeout=90s echo "✅ Deployed management-platform:${BUILD_NUMBER} to Kubernetes" ''' } } } } post { success { echo '✅ Pipeline succeeded — build + Sonar passed, deployed to k8s' } failure { echo '❌ Pipeline failed — check logs' } } }