From 3c90fe9ce8d740c6779a2806eba52be0b74e5b41 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 20 Aug 2026 11:46:39 +0200 Subject: [PATCH] Replace Jenkins Git plugin checkout with a plain shell clone + retry loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Git plugin's checkout([...]) step doesn't expose http.postBuffer/ http.version tuning, which is what's reliably fixed every stuck push/clone today (VPS and both laptops) — meanwhile checkout was failing ~10 times in a row, consistently dying at 84-95% during the shallow clone (early EOF / invalid index-pack). Bypasses the plugin entirely: a plain `git clone` with those settings applied, wrapped in its own 8-attempt bash retry loop, using the existing dd13f593-06b1-4a5a-9477-2df0d186b490 credential (confirmed via credentials.xml to be a UsernamePasswordCredentialsImpl, compatible with the usernamePassword binding as-is). Code now lands in a repo/ subdirectory instead of the workspace root, so every stage referencing a repo-relative path was updated to match: - Build Docker Image: ./platform/ -> ./repo/platform/ - SonarQube Analysis: -Dsonar.sources=platform -> -Dsonar.sources=repo/platform Deploy to Kubernetes needed no changes — it only references the already-built image tag and hardcoded kubectl args, no filesystem paths into the checkout. Co-Authored-By: Claude Sonnet 5 --- platform/Jenkinsfile | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/platform/Jenkinsfile b/platform/Jenkinsfile index a5558cc..ccb8ec6 100644 --- a/platform/Jenkinsfile +++ b/platform/Jenkinsfile @@ -14,19 +14,24 @@ pipeline { stages { stage('Checkout') { steps { - retry(5) { - checkout([ - $class: 'GitSCM', - branches: scm.branches, - userRemoteConfigs: scm.userRemoteConfigs, - extensions: [[ - $class: 'CloneOption', - shallow: true, - depth: 1, - noTags: true, - timeout: 30 - ]] - ]) + withCredentials([usernamePassword( + credentialsId: 'dd13f593-06b1-4a5a-9477-2df0d186b490', + usernameVariable: 'GIT_USER', + passwordVariable: 'GIT_TOKEN' + )]) { + sh ''' + rm -rf repo + for i in 1 2 3 4 5 6 7 8; do + echo "Clone attempt $i..." + git -c http.postBuffer=524288000 -c http.version=HTTP/1.1 \ + clone --depth 1 \ + "https://$GIT_USER:$GIT_TOKEN@gitea.nav.ovh/ameniboukattaya/CloudOps.git" repo \ + && break + rm -rf repo + sleep 3 + done + test -d repo/.git + ''' } } } @@ -34,7 +39,7 @@ pipeline { stage('Build Docker Image') { steps { sh ''' - docker build -t management-platform:${BUILD_NUMBER} -t management-platform:latest ./platform/ + docker build -t management-platform:${BUILD_NUMBER} -t management-platform:latest ./repo/platform/ echo "✅ Docker image built" docker images management-platform:${BUILD_NUMBER} --format "Size: {{.Size}}" ''' @@ -50,7 +55,7 @@ pipeline { sh """ ${scannerHome}/bin/sonar-scanner \ -Dsonar.projectKey=management-platform \ - -Dsonar.sources=platform \ + -Dsonar.sources=repo/platform \ -Dsonar.python.version=3 """ }