87 lines
2.4 KiB
Groovy
87 lines
2.4 KiB
Groovy
pipeline {
|
|
agent any
|
|
|
|
tools {
|
|
|
|
}
|
|
|
|
environment {
|
|
WEB_IP = '13.49.223.142' // EC2 web server IP
|
|
SSH_USER = 'deploy' // Deploy user
|
|
SSH_KEY_PATH = '/home/ubuntu/.ssh/jenkins-deploy' // Path to private key on Jenkins server
|
|
NODE_OPTIONS = "--max_old_space_size=512"
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('Install') {
|
|
steps {
|
|
sh '''
|
|
echo "📦 Installing dependencies..."
|
|
npm ci
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Build') {
|
|
steps {
|
|
sh '''
|
|
echo "🏗️ Building project..."
|
|
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
|
|
|
|
echo "📦 Packaging build output..."
|
|
tar -czf build.tar.gz -C "$OUT_DIR" .
|
|
'''
|
|
archiveArtifacts artifacts: 'build.tar.gz'
|
|
}
|
|
}
|
|
|
|
stage('Deploy') {
|
|
steps {
|
|
script {
|
|
sh """
|
|
echo "🚀 Deploying to ${WEB_IP}..."
|
|
|
|
# Copy build to remote server
|
|
scp -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no build.tar.gz ${SSH_USER}@${WEB_IP}:/tmp/build.tar.gz
|
|
|
|
# Deploy remotely
|
|
ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${SSH_USER}@${WEB_IP} '
|
|
mkdir -p ~/reactapp
|
|
rm -rf ~/reactapp/*
|
|
tar -xzf /tmp/build.tar.gz -C ~/reactapp
|
|
'
|
|
|
|
echo "✅ Deployment finished"
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success { echo "✅ Pipeline completed successfully" }
|
|
failure { echo "❌ Pipeline failed — check console log" }
|
|
}
|
|
}
|