diff --git a/Jenkinsfile b/Jenkinsfile index 497e900..a70317d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,93 +1,83 @@ pipeline { - agent any + agent any - environment { - DEPLOY_HOST = "192.168.178.180" // your VM IP or hostname - DEPLOY_USER = "ubuntu" // user on the VM - APP_DIR = "/srv/mitm-webserver" // deploy target directory + 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' + } } - stages { - stage('Checkout') { - steps { - echo "📦 Checking out source code from Gitea..." - git branch: 'main', url: 'http://192.168.178.96:3000/marcus/mitm-webserver.git' - } - } - - stage('Build Frontend') { - steps { - dir('frontend') { - echo "⚙️ Building frontend..." - sh 'npm ci' - sh 'npm run build' - } - } - } - - stage('Prepare Backend') { - steps { - dir('backend') { - echo "🐍 Preparing backend..." - sh ''' - python3 -m venv venv - ./venv/bin/pip install --upgrade pip - ./venv/bin/pip install -r requirements.txt - ''' - } - } - } - - stage('Deploy to VM') { - steps { - echo "🚀 Deploying mitm-webserver to ${DEPLOY_HOST}..." - - withCredentials([usernamePassword( - credentialsId: 'deploy-pass-id', // Jenkins credential ID - usernameVariable: 'USER', - passwordVariable: 'PASS' - )]) { - - sh ''' - # Ensure sshpass is installed - if ! command -v sshpass >/dev/null 2>&1; then - echo "Installing sshpass..." - 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 to $HOSTNAME'" - - echo "📤 Uploading frontend build..." - 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 service..." - 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 - " - - echo "✅ Deployment finished successfully." - ''' - } - } + stage('Build Frontend') { + steps { + dir('frontend') { + sh 'npm ci' + sh 'npm run build' } + } } - post { - success { - echo '✅ mitm-webserver deployed successfully!' - } - failure { - echo '❌ Deployment failed. Check Jenkins logs for details.' + 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.' } + } }