diff --git a/platform/Jenkinsfile b/platform/Jenkinsfile index 923c94b..ebdcbf9 100644 --- a/platform/Jenkinsfile +++ b/platform/Jenkinsfile @@ -17,40 +17,61 @@ pipeline { stage('Build Docker Image') { steps { sh ''' - docker build -t management-platform:latest ./platform/ + docker build -t management-platform:${BUILD_NUMBER} -t management-platform:latest ./platform/ echo "✅ Docker image built" - docker images management-platform:latest --format "Size: {{.Size}}" + docker images management-platform:${BUILD_NUMBER} --format "Size: {{.Size}}" ''' } } stage('SonarQube Analysis') { steps { - withSonarQubeEnv('sonarqube') { - script { - def scannerHome = tool 'sonar-scanner' - sh """ - ${scannerHome}/bin/sonar-scanner \ - -Dsonar.projectKey=management-platform \ - -Dsonar.sources=platform \ - -Dsonar.python.version=3 - """ + 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 [TODO - not implemented yet]') { + stage('Deploy to Kubernetes') { steps { - echo '⚠️ K8s deploy stage not implemented yet — image built but not pushed to the cluster.' - echo 'Image import + kubectl rollout still needs to be designed (RBAC + pod template + image transfer).' + 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 - + + TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) + CACERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt + + /usr/local/bin/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/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, k8s deploy pending' + echo '✅ Pipeline succeeded — build + Sonar passed, deployed to k8s' } failure { echo '❌ Pipeline failed — check logs'