diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..93bef48 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,47 @@ +pipeline { + agent any + tools { nodejs 'Node18' } + environment { + WEB_IP = '13.49.223.142' // your EC2 web server IP + SSH_CRED = 'deploy-ec2-key' // Jenkins credential ID for SSH key + } + stages { + stage('Checkout') { steps { checkout scm } } + stage('Install') { steps { sh 'npm ci || npm install' } } + stage('Build') { steps { sh 'npm run build' } } + stage('Package') { + steps { + sh ''' + OUT_DIR="build" + [ -d dist ] && OUT_DIR="dist" + if [ ! -d "$OUT_DIR" ]; then + echo "ERROR: No build output found (build/ or dist/)" + ls -la + exit 1 + fi + tar -czf build.tar.gz -C "$OUT_DIR" . + ''' + archiveArtifacts artifacts: 'build.tar.gz' + } + } + stage('Deploy') { + steps { + sshagent(credentials: [env.SSH_CRED]) { + sh ''' + scp -o StrictHostKeyChecking=no build.tar.gz deploy@${WEB_IP}:/tmp/build.tar.gz + ssh -o StrictHostKeyChecking=no deploy@${WEB_IP} ' + sudo rm -rf /var/www/reactapp/*; + sudo mkdir -p /var/www/reactapp; + sudo tar -xzf /tmp/build.tar.gz -C /var/www/reactapp; + sudo systemctl reload nginx + ' + ''' + } + } + } + } + post { + success { echo "✅ Deployed successfully" } + failure { echo "❌ Failed — check console" } + } +}