pipeline { agent any environment { DEPLOY_HOST = "192.168.178.180" DEPLOY_USER = "ubuntu" APP_DIR = "/srv/mitm-webserver" } stages { stage('Checkout') { steps { git branch: 'main', url: 'http://192.168.178.96:3000/marcus/mitm-webserver.git' } } stage('Build Frontend') { steps { dir('frontend') { sh 'npm ci' sh 'npm run build' } } } stage('Prepare Backend') { steps { dir('backend') { sh ''' python3 -m venv venv ./venv/bin/pip install --upgrade pip ./venv/bin/pip install -r requirements.txt ''' } } } stage('Deploy to VM') { steps { withCredentials([usernamePassword( credentialsId: 'deploy-pass-id', usernameVariable: 'USER', passwordVariable: 'PASS' )]) { sh ''' # make sure sshpass exists if ! command -v sshpass >/dev/null 2>&1; then sudo apt-get update -y && sudo apt-get install -y sshpass fi echo "Testing SSH connection..." sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \ $USER@$DEPLOY_HOST "echo Connected OK" echo "Uploading frontend..." sshpass -p "$PASS" rsync -avz --delete \ -e "ssh -o StrictHostKeyChecking=no" \ frontend/dist/ $USER@$DEPLOY_HOST:$APP_DIR/frontend/dist/ echo "Uploading backend..." sshpass -p "$PASS" rsync -avz --delete \ -e "ssh -o StrictHostKeyChecking=no" \ backend/ $USER@$DEPLOY_HOST:$APP_DIR/backend/ echo "Restarting backend..." sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no \ $USER@$DEPLOY_HOST " cd $APP_DIR/backend && source venv/bin/activate && sudo systemctl restart mitm-webserver-backend.service " ''' } } } } post { success { echo '✅ mitm-webserver deployed successfully!' } failure { echo '❌ Deployment failed. Check logs for details.' } } }