FabioFratini 10 months ago
parent
commit
68122a5c0c
1 changed files with 33 additions and 24 deletions
  1. 33 24
      Jenkinsfile

+ 33 - 24
Jenkinsfile

@@ -29,11 +29,10 @@ pipeline {
         REMOTE_USER = 'fratini'
         REMOTE_DIR = '/var/www/html/polizia'
 
-        // Store the SSH password as an environment variable
-        // You need to set this in Jenkins as a secret text credential
-        SSH_PASS = credentials('fratini-ssh-password')
-
         ADMIN_EMAIL = 'f.fratini@webmagistri.it'
+
+        // Define the SSH password credential
+        SSH_PASS = credentials('fratini-ssh-password')
     }
 
     stages {
@@ -52,8 +51,8 @@ pipeline {
                 sh 'node --version || echo "Node not available locally"'
                 sh 'npm --version || echo "NPM not available locally"'
 
-                // Check if sshpass is installed
-                sh 'sshpass -V || echo "sshpass not available, please install it on Jenkins server"'
+                // Verify sshpass is installed
+                sh 'sshpass -V || echo "sshpass not installed"'
             }
         }
 
@@ -80,7 +79,7 @@ pipeline {
         stage('Deploy to Server') {
             when {
                 expression {
-                    // Always deploy from develop branch
+                    // Always deploy from develop branch or if we're in a detached HEAD state
                     return env.CURRENT_BRANCH == 'HEAD' || env.CURRENT_BRANCH == 'develop' ||
                            env.GIT_BRANCH == 'origin/develop' || env.BRANCH_NAME == 'develop'
                 }
@@ -88,30 +87,40 @@ pipeline {
             steps {
                 echo "Starting deployment to ${REMOTE_HOST} as user ${REMOTE_USER}"
 
-                // Create remote directory
-                sh "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'mkdir -p ${REMOTE_DIR}'"
+                // Using environment file approach for password
+                sh '''
+                    # Create a temporary password file with correct permissions
+                    echo "${SSH_PASS}" > /tmp/ssh_password
+                    chmod 600 /tmp/ssh_password
+
+                    # Create remote directory
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p ${REMOTE_DIR}"
+
+                    # Sync files excluding unnecessary ones
+                    sshpass -f /tmp/ssh_password rsync -avz -e "ssh -o StrictHostKeyChecking=no" --exclude '.git' --exclude 'node_modules' --exclude 'vendor' ./ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
 
-                // Sync files
-                sh "sshpass -p \"\${SSH_PASS}\" rsync -avz -e \"ssh -o StrictHostKeyChecking=no\" --exclude '.git' --exclude 'node_modules' --exclude 'vendor' ./ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/"
+                    # Run composer install
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && composer install --no-interaction --no-dev --prefer-dist"
 
-                // Run composer install
-                sh "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && composer install --no-interaction --no-dev --prefer-dist'"
+                    # Run npm install and build
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && npm install && npm run build"
 
-                // Run npm install and build
-                sh "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && npm install && npm run build'"
+                    # Run Laravel artisan commands
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan migrate --force && php artisan config:cache && php artisan route:cache && php artisan view:cache && php artisan optimize && php artisan storage:link"
 
-                // Run Laravel artisan commands
-                sh "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && php artisan migrate --force && php artisan config:cache && php artisan route:cache && php artisan view:cache && php artisan optimize && php artisan storage:link'"
+                    # Set permissions
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && chmod -R 775 storage bootstrap/cache && sudo chown -R www-data:www-data ."
 
-                // Set permissions
-                sh "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && chmod -R 775 storage bootstrap/cache && sudo chown -R www-data:www-data .'"
+                    # Restart services
+                    sshpass -f /tmp/ssh_password 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'"
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo systemctl restart nginx || echo 'Nginx restart failed, may need manual intervention'"
 
-                // Restart services
-                sh "sshpass -p \"\${SSH_PASS}\" 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 "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl restart nginx || echo \"Nginx restart failed, may need manual intervention\"'"
+                    # Clear cache
+                    sshpass -f /tmp/ssh_password ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan cache:clear"
 
-                // Clear cache
-                sh "sshpass -p \"\${SSH_PASS}\" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && php artisan cache:clear'"
+                    # Clean up temporary password file
+                    rm -f /tmp/ssh_password
+                '''
             }
         }
     }