// Jenkinsfile pipeline { 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() ansiColor('xterm') } environment { CI = "true" NODE_ENV = "production" NEXT_TELEMETRY_DISABLED = "1" PORT = "3000" } stages { stage('Checkout') { steps { // Standard-Checkout; läuft im Container checkout scm // LFS & Submodule wie in Woodpecker aktivieren sh ''' 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('verify-mocks') { steps { sh ''' 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-dev') { steps { sh ''' set -eux node -v && npm -v # Husky als devDep nicht ausführen -> npm_config_production=false env npm_config_production=false npm ci npm run build # 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 ''' } } } post { success { sh ''' set -eux curl -d "Tests erfolgreich in woodpecker" https://ntfy.sh/OEOr8DNB0aT2mXWg231PeEEKwvuzt86qgM8ezQmgfcX9ZIlZ35 ''' } failure { sh ''' set -eux curl -d "Tests fehlgeschlagen in woodpecker" https://ntfy.sh/OEOr8DNB0aT2mXWg231PeEEKwvuzt86qgM8ezQmgfcX9ZIlZ35 ''' } always { // Optional: Artefakte, Logs, Playwright-Reports archivieren // archiveArtifacts artifacts: 'playwright-report/**', onlyIfSuccessful: false } } }