Replace Jenkins Git plugin checkout with a plain shell clone + retry loop

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 <noreply@anthropic.com>
This commit is contained in:
root
2026-08-20 11:46:39 +02:00
parent a6fb9e5e18
commit 3c90fe9ce8

35
platform/Jenkinsfile vendored
View File

@@ -14,19 +14,24 @@ pipeline {
stages { stages {
stage('Checkout') { stage('Checkout') {
steps { steps {
retry(5) { withCredentials([usernamePassword(
checkout([ credentialsId: 'dd13f593-06b1-4a5a-9477-2df0d186b490',
$class: 'GitSCM', usernameVariable: 'GIT_USER',
branches: scm.branches, passwordVariable: 'GIT_TOKEN'
userRemoteConfigs: scm.userRemoteConfigs, )]) {
extensions: [[ sh '''
$class: 'CloneOption', rm -rf repo
shallow: true, for i in 1 2 3 4 5 6 7 8; do
depth: 1, echo "Clone attempt $i..."
noTags: true, git -c http.postBuffer=524288000 -c http.version=HTTP/1.1 \
timeout: 30 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') { stage('Build Docker Image') {
steps { steps {
sh ''' 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" echo "✅ Docker image built"
docker images management-platform:${BUILD_NUMBER} --format "Size: {{.Size}}" docker images management-platform:${BUILD_NUMBER} --format "Size: {{.Size}}"
''' '''
@@ -50,7 +55,7 @@ pipeline {
sh """ sh """
${scannerHome}/bin/sonar-scanner \ ${scannerHome}/bin/sonar-scanner \
-Dsonar.projectKey=management-platform \ -Dsonar.projectKey=management-platform \
-Dsonar.sources=platform \ -Dsonar.sources=repo/platform \
-Dsonar.python.version=3 -Dsonar.python.version=3
""" """
} }