From 741fc78b96b983b844bbb2caacfa2736079d85ba Mon Sep 17 00:00:00 2001 From: jose-rZM <100773386+jose-rZM@users.noreply.github.com> Date: Mon, 15 Dec 2025 13:55:47 +0100 Subject: [PATCH] Update Jenkinsfile --- Jenkinsfile | 261 +++++++++++++++++++--------------------------------- 1 file changed, 95 insertions(+), 166 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index eda257a..5b3cb9e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,199 +1,128 @@ pipeline { - agent none + agent none - options { - timestamps() + options { + timestamps() + } + + environment { + CI = 'true' + NODE_OPTIONS = '--max_old_space_size=2048' + APP_VERSION = "1.0.${BUILD_NUMBER}" + DOCKER_BUILDKIT = '1' + } + + stages { + + stage('Init') { + agent any + steps { + script { + env.COMMIT_AUTHOR = sh( + script: "git show -s --format=%an HEAD", + returnStdout: true + ).trim() + + env.COMMIT_SHORT = sh( + script: "git rev-parse --short HEAD", + returnStdout: true + ).trim() + } + } } - environment { - CI = 'true' - NODE_OPTIONS = '--max_old_space_size=2048' - - APP_VERSION = "1.0.${BUILD_NUMBER}" + stage('Backend: lint & test') { + agent { + docker { + image 'python:3.11-slim' + args '-u root' + } + } + steps { + dir('backend') { + sh ''' + set -e + python -m venv .venv + . .venv/bin/activate + pip install --upgrade pip + pip install -r requirements-dev.txt + ruff check app tests + pytest + ''' + } + } } - stages { - - stage('Init') { - agent any - steps { - script { - env.COMMIT_AUTHOR = sh( - script: "git show -s --format=%an HEAD", - returnStdout: true - ).trim() - - env.COMMIT_SHORT = sh( - script: "git rev-parse --short HEAD", - returnStdout: true - ).trim() - } - - echo "Last commit: ${env.COMMIT_AUTHOR}" + stage('Frontend: check & build') { + agent { + docker { + image 'node:20-slim' } } - - - /* ========================= - BACKEND (Python) - ========================= */ - - stage('Backend: deps') { - agent { - docker { - image 'python:3.12' - args '-u root' - } - } - steps { - dir('backend') { - sh ''' - set -e - python --version - python -m venv .venv - . .venv/bin/activate - pip install --upgrade pip - pip install -r requirements-dev.txt - ''' - } + steps { + dir('frontend') { + sh ''' + set -e + npm install --no-progress --no-audit --prefer-offline + npm run check + npm run build + ''' } } + } - stage('Backend: lint & test') { - agent { - docker { - image 'python:3.12' - args '-u root' - } - } - steps { - dir('backend') { - sh ''' - set -e - . .venv/bin/activate - ruff check app tests - pytest - ''' - } - } - } - - /* ========================= - FRONTEND (Node) - ========================= */ - - stage('Frontend: deps') { - agent { - docker { - image 'node:20' - } - } - steps { - dir('frontend') { - sh ''' - set -e - node --version - npm --version - npm install --no-progress --no-audit --prefer-offline - ''' - } - } - } - - stage('Frontend: check & test') { - agent { - docker { - image 'node:20' - } - } - steps { - dir('frontend') { - sh ''' - set -e - npm run check - ''' - } - } - } - - stage('Frontend: build') { - agent { - docker { - image 'node:20' - } - } - steps { - dir('frontend') { - sh ''' - set -e - npm run build - ''' - } - } - } - - /* ========================= - DOCKER - ========================= */ - - stage('Docker: build images') { - when { - expression { - fileExists('backend/Dockerfile') && - fileExists('frontend/Dockerfile') - } - } + stage('Docker: build images') { agent any steps { sh ''' set -e - docker version docker build \ --build-arg APP_VERSION=${APP_VERSION} \ --build-arg GIT_COMMIT=${COMMIT_SHORT} \ --build-arg COMMIT_AUTHOR="${COMMIT_AUTHOR}" \ --build-arg BUILD_NUMBER=${BUILD_NUMBER} \ - -t cafeteria-backend:${BUILD_NUMBER} ./backend + -t cafeteria-backend:latest \ + -t cafeteria-backend:${BUILD_NUMBER} \ + ./backend docker build \ - -t cafeteria-frontend:${BUILD_NUMBER} ./frontend + -t cafeteria-frontend:latest \ + -t cafeteria-frontend:${BUILD_NUMBER} \ + ./frontend ''' } } - stage('Deploy frontend & backend') { - agent any - steps { - sh ''' - set -e + stage('Deploy frontend & backend') { + agent any + steps { + sh ''' + set -e - echo "Deploying build ${BUILD_NUMBER}" + docker rm -f cafeteria-backend cafeteria-frontend 2>/dev/null || true - docker rm -f cafeteria-backend cafeteria-frontend 2>/dev/null || true + docker run -d \ + --name cafeteria-backend \ + -p 8000:8000 \ + cafeteria-backend:latest - - docker run -d \ - --name cafeteria-backend \ - -p 8000:8000 \ - cafeteria-backend:${BUILD_NUMBER} - - docker run -d \ - --name cafeteria-frontend \ - -p 3000:80 \ - cafeteria-frontend:${BUILD_NUMBER} - ''' - } - } - } - - post { - always { - script { - node { - cleanWs() - } - } + docker run -d \ + --name cafeteria-frontend \ + -p 3000:80 \ + cafeteria-frontend:latest + ''' } } } + + post { + always { + sh ''' + docker image prune -a -f || true + docker builder prune -a -f || true + ''' + cleanWs() + } + } +}