pipeline { agent any environment { APP_NAME = 'Polizia' APP_ENV = 'testing' APP_KEY = credentials('APP_KEY') APP_DEBUG = 'false' APP_URL = 'https://frascati.dev.webmagistri.biz' LOG_CHANNEL = 'stack' LOG_DEPRECATIONS_CHANNEL = 'null' LOG_LEVEL = 'debug' DB_CONNECTION = 'mysql' DB_HOST = '127.0.0.1' DB_PORT = '3306' DB_DATABASE = 'polizia_online' DB_USERNAME = credentials('DB_USERNAME') DB_PASSWORD = credentials('DB_PASSWORD') BROADCAST_DRIVER = 'log' CACHE_DRIVER = 'file' FILESYSTEM_DISK = 'local' QUEUE_CONNECTION = 'sync' SESSION_DRIVER = 'file' SESSION_LIFETIME = '120' MAIL_MAILER = 'smtp' MAIL_HOST = 'mailpit' MAIL_PORT = '1025' MAIL_USERNAME = 'null' MAIL_PASSWORD = 'null' MAIL_ENCRYPTION = 'null' MAIL_FROM_ADDRESS = 'hello@example.com' MAIL_FROM_NAME = 'Polizia' MCTC_URL = 'https://www.ilportaledellautomobilista.it/Info-ws/services' MCTC_USER = credentials('MCTC_USER') MCTC_PASSWORD = credentials('MCTC_PASSWORD') STORAGE_PATH = 'app/public/' REMOTE_HOST = '10.2.0.10' REMOTE_USER = credentials('REMOTE_USER') REMOTE_DIR = '/var/www/html/polizia' } stages { stage('Setup') { steps { sh 'which php || echo "PHP not found in PATH"' sh 'which composer || echo "Composer not found in PATH"' sh 'which node || echo "Node not found in PATH"' sh 'which npm || echo "NPM not found in PATH"' // Check versions if available sh 'php --version || echo "PHP not available"' sh 'composer --version || echo "Composer not available"' sh 'node --version || echo "Node not available"' sh 'npm --version || echo "NPM not available"' } } stage('Get Code') { steps { checkout scm } } stage('Install Dependencies') { steps { sh 'composer install --no-interaction --no-progress --prefer-dist || echo "Skipping composer install"' } } stage('Setup Environment') { steps { sh 'cp .env.example .env' sh 'php artisan key:generate' sh 'php artisan config:clear' sh 'php artisan cache:clear' } } stage('Run Tests') { steps { sh 'php artisan config:cache' sh 'php artisan test --testsuite=Feature --testsuite=Unit || true' sh 'php artisan config:clear' } } stage('Build Assets') { steps { sh 'npm install || echo "Skipping npm install"' sh 'npm run build || echo "Skipping npm build"' } } stage('Deploy to Server') { when { anyOf { branch 'develop' } } steps { sshagent(['ssh-key-10.2.0.10']) { // Ensure the remote directory exists sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'mkdir -p ${REMOTE_DIR}'" // Use rsync to transfer files sh """ rsync -avz --exclude '.git' --exclude 'node_modules' --exclude 'vendor' -e 'ssh -o StrictHostKeyChecking=no' ./ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/ """ // Run setup commands on remote server sh """ ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && \ composer install --no-interaction --no-dev --prefer-dist && \ npm install && \ npm run build && \ php artisan migrate --force && \ php artisan config:cache && \ php artisan route:cache && \ php artisan view:cache && \ php artisan optimize && \ php artisan storage:link && \ chmod -R 775 storage bootstrap/cache && \ chown -R www-data:www-data .' """ // Restart relevant services if needed sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl restart php8.1-fpm || sudo systemctl restart php-fpm || echo \"PHP service restart failed, may need manual intervention\"'" sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl restart nginx || echo \"Nginx restart failed, may need manual intervention\"'" // Clear any caches sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && php artisan cache:clear'" } } } } post { always { cleanWs() } success { echo 'Build successful! The Polizia application is now deployed to 10.2.0.10' mail to: credentials('ADMIN_EMAIL'), subject: 'Polizia - Build Successful', body: 'The build was successful and the Polizia application has been deployed to the server at 10.2.0.10' } failure { echo 'Build failed! Please check the console output to fix the issues.' mail to: credentials('ADMIN_EMAIL'), subject: 'Polizia - Build Failed', body: 'The build has failed. Please check Jenkins for details.' } } }