From 25b6c5c3b005e0471ac94a18de2a66373613b032 Mon Sep 17 00:00:00 2001 From: ISA Date: Mon, 8 Sep 2025 08:30:09 +0200 Subject: [PATCH] fix: Jenkinsfile --- .env.development | 2 +- .env.production | 2 +- CHANGELOG.md | 5 ++ Jenkinsfile | 116 ++++++++++++++++++++++++++++++---------------- package-lock.json | 4 +- package.json | 2 +- 6 files changed, 85 insertions(+), 46 deletions(-) diff --git a/.env.development b/.env.development index 7da4ec8..c38894c 100644 --- a/.env.development +++ b/.env.development @@ -6,6 +6,6 @@ NEXT_PUBLIC_USE_MOCK_BACKEND_LOOP_START=false NEXT_PUBLIC_EXPORT_STATIC=false NEXT_PUBLIC_USE_CGI=false # App-Versionsnummer -NEXT_PUBLIC_APP_VERSION=1.6.862 +NEXT_PUBLIC_APP_VERSION=1.6.863 NEXT_PUBLIC_CPL_MODE=json # json (Entwicklungsumgebung) oder jsSimulatedProd (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter) diff --git a/.env.production b/.env.production index c3240b5..570e2d8 100644 --- a/.env.production +++ b/.env.production @@ -5,5 +5,5 @@ NEXT_PUBLIC_CPL_API_PATH=/CPL NEXT_PUBLIC_EXPORT_STATIC=true NEXT_PUBLIC_USE_CGI=true # App-Versionsnummer -NEXT_PUBLIC_APP_VERSION=1.6.862 +NEXT_PUBLIC_APP_VERSION=1.6.863 NEXT_PUBLIC_CPL_MODE=production \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 486f013..077a044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [1.6.863] – 2025-09-08 + +- fix: Vereinfacht: Jenkinsfile + +--- ## [1.6.862] – 2025-09-08 - fix. Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile index 93bf67e..b18d713 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,65 +1,92 @@ +// Jenkinsfile pipeline { - agent any - tools { nodejs 'node20' } + agent { + // Wir nutzen das Playwright-Image auch als Build-/Test-Container + // (enthält Node, Browser & nötige Deps) + docker { + image 'mcr.microsoft.com/playwright:v1.54.2-jammy' + // optional: args '--user root' falls Rechte benötigt werden + reuseNode true + } + } - options { timestamps() } + options { + timestamps() + ansiColor('xterm') + } environment { - CI = 'true' - NODE_ENV = 'production' - NEXT_TELEMETRY_DISABLED = '1' - PORT = '3000' - HUSKY = '0' - npm_config_fund = 'false' - npm_config_audit = 'false' + CI = "true" + NODE_ENV = "production" + NEXT_TELEMETRY_DISABLED = "1" + PORT = "3000" } stages { - stage('Verify mocks') { + + stage('Checkout') { steps { + // Standard-Checkout; läuft im Container + checkout scm + + // LFS & Submodule wie in Woodpecker aktivieren sh ''' -set -eu -echo "[Verify mocks] repo file check" -echo "Node available?"; node -v; npm -v -echo "Check file exists" -if [ -f mocks/device-cgi-simulator/SERVICE/systemMockData.js ]; then - echo 'FOUND' -else - echo 'MISSING'; exit 1 -fi + set -eux + # Falls LFS verwendet wird: + if command -v git >/dev/null; then + git lfs install || true + # Submodule + LFS-Dateien sicherstellen + git submodule update --init --recursive || true + # LFS-Dateien ziehen (falls vorhanden) + git lfs fetch || true + git lfs checkout || true + fi + + # Debug: kurzer Baumüberblick + git status --short || true ''' } } - stage('Install & Build') { + stage('verify-mocks') { steps { sh ''' -set -eu -echo 'Install dependencies (incl dev)' -env npm_config_production=false npm ci -echo 'Build app' -npm run build + set -eux + pwd + node -v && npm -v + + # Husky/prepare überspringen wie im Woodpecker-Job + npm ci --ignore-scripts + + echo "=== git ls-files ===" + git ls-files | grep -i "^mocks/device-cgi-simulator/SERVICE/systemMockData.js" || true + echo "=== ls -la ===" + ls -la mocks/device-cgi-simulator/SERVICE || true + echo "=== file exists? ===" + test -f mocks/device-cgi-simulator/SERVICE/systemMockData.js && echo "FOUND" || (echo "MISSING" && exit 1) ''' } } - stage('E2E chromium') { + stage('e2e-dev') { steps { sh ''' -set -eu -echo 'Start simulator' -npm run server:sim & -SIM_PID=$! -trap 'echo Stopping simulator; kill $SIM_PID 2>/dev/null || true' EXIT + set -eux + node -v && npm -v -echo 'Wait for http://localhost:3000' -node -e "const http=require('http');let n=120;function ping(){http.get('http://localhost:3000',res=>{console.log('Server is up');process.exit(0)}).on('error',()=>{if(n--<=0){console.error('Server did not start');process.exit(1)}setTimeout(ping,1000)});}ping();" + # Husky als devDep nicht ausführen -> npm_config_production=false + env npm_config_production=false npm ci -echo 'Ensure chromium available' -npx playwright install chromium || true + npm run build -echo 'Run tests' -npx playwright test --project=chromium + # Sim-Server im Hintergrund starten + npm run server:sim & + + # Auf Port 3000 warten (ohne curl) + node -e "const http=require('http');let n=120;function ping(){http.get('http://localhost:3000',res=>{console.log('Server is up');process.exit(0)}).on('error',()=>{if(n--<=0){console.error('Server did not start');process.exit(1)}setTimeout(ping,1000)});}ping();" + + # Playwright Tests + npx playwright test --project=chromium ''' } } @@ -67,13 +94,20 @@ npx playwright test --project=chromium post { success { - sh 'curl -d "Tests erfolgreich in Jenkins" https://ntfy.sh/OEOr8DNB0aT2mXWg231PeEEKwvuzt86qgM8ezQmgfcX9ZIlZ35' + sh ''' + set -eux + curl -d "Tests erfolgreich in woodpecker" https://ntfy.sh/OEOr8DNB0aT2mXWg231PeEEKwvuzt86qgM8ezQmgfcX9ZIlZ35 + ''' } failure { - sh 'curl -d "Tests fehlgeschlagen in Jenkins" https://ntfy.sh/OEOr8DNB0aT2mXWg231PeEEKwvuzt86qgM8ezQmgfcX9ZIlZ35' + sh ''' + set -eux + curl -d "Tests fehlgeschlagen in woodpecker" https://ntfy.sh/OEOr8DNB0aT2mXWg231PeEEKwvuzt86qgM8ezQmgfcX9ZIlZ35 + ''' } always { - sh 'echo Workspace: $(pwd); ls -1' + // Optional: Artefakte, Logs, Playwright-Reports archivieren + // archiveArtifacts artifacts: 'playwright-report/**', onlyIfSuccessful: false } } } diff --git a/package-lock.json b/package-lock.json index c204332..3f4f73e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cpl-v4", - "version": "1.6.862", + "version": "1.6.863", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cpl-v4", - "version": "1.6.862", + "version": "1.6.863", "dependencies": { "@fontsource/roboto": "^5.1.0", "@headlessui/react": "^2.2.4", diff --git a/package.json b/package.json index 6ed890a..02229b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cpl-v4", - "version": "1.6.862", + "version": "1.6.863", "private": true, "scripts": { "dev": "next dev -p 3000",