Files
CPLv4.0/Jenkinsfile
2025-09-08 08:30:09 +02:00

114 lines
3.0 KiB
Groovy

// 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
}
}
}