pipeline { agent any parameters { string( name: 'REPO_URL', defaultValue: 'https://git.crowmate.fr/crowmate/Nest.git', description: 'Gitea repository URL to clone' ) string( name: 'BRANCH', defaultValue: 'main', description: 'Branch to build' ) string( name: 'IMAGE_TAG', defaultValue: 'latest', description: 'Docker image tag (e.g. latest, v1.0.0)' ) } environment { GITEA_CREDENTIALS_ID = 'gitea-token' REGISTRY = 'git.crowmate.fr' REGISTRY_OWNER = 'crowmate' } stages { stage('Clone') { steps { cleanWs() checkout([ $class: 'GitSCM', branches: [[name: "*/${params.BRANCH}"]], userRemoteConfigs: [[ url: params.REPO_URL, credentialsId: env.GITEA_CREDENTIALS_ID ]] ]) echo "Repository cloned" } } stage('Build & Push images') { steps { withCredentials([usernamePassword( credentialsId: env.GITEA_CREDENTIALS_ID, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS' )]) { sh ''' echo "$REGISTRY_PASS" | docker login ''' + env.REGISTRY + ''' -u "$REGISTRY_USER" --password-stdin echo "Connected to Gitea registry" ''' sh """ echo "Build nest-api..." docker build -t ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-api:${params.IMAGE_TAG} ./nest-backend echo "Build nest-front..." docker build -t ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-front:${params.IMAGE_TAG} ./nest-front echo "Build nest-intra..." docker build -t ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-intra:${params.IMAGE_TAG} ./nest-intra """ sh """ echo "Push nest-api..." docker push ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-api:${params.IMAGE_TAG} echo "Push nest-front..." docker push ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-front:${params.IMAGE_TAG} echo "Push nest-intra..." docker push ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-intra:${params.IMAGE_TAG} """ sh "docker logout ${env.REGISTRY}" } } } } post { success { echo "Images built and pushed successfully (tag: ${params.IMAGE_TAG})" } failure { echo "Build/push failed" } always { // Clean local images to avoid filling up disk space sh """ docker rmi ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-api:${params.IMAGE_TAG} || true docker rmi ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-front:${params.IMAGE_TAG} || true docker rmi ${env.REGISTRY}/${env.REGISTRY_OWNER}/nest-intra:${params.IMAGE_TAG} || true """ } } }