Jenkinsfile 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. pipeline {
  2. agent any
  3. environment {
  4. APP_NAME = 'Polizia'
  5. APP_ENV = 'testing'
  6. APP_KEY = 'base64:1YsMWZ+cIDVa5NIePkjsXVheT9rbykHDs/CnGPUQdqU='
  7. APP_DEBUG = 'false'
  8. APP_URL = 'https://frascati.dev.webmagistri.biz'
  9. LOG_CHANNEL = 'stack'
  10. LOG_DEPRECATIONS_CHANNEL = 'null'
  11. LOG_LEVEL = 'debug'
  12. DB_CONNECTION = 'mysql'
  13. DB_HOST = '127.0.0.1'
  14. DB_PORT = '3306'
  15. DB_DATABASE = 'polizia_online'
  16. DB_USERNAME = 'admin'
  17. DB_PASSWORD = 'admin'
  18. MCTC_URL = 'https://www.ilportaledellautomobilista.it/Info-ws/services'
  19. MCTC_USER = 'CMRM001301'
  20. MCTC_PASSWORD = '2PMPM*86'
  21. STORAGE_PATH = 'app/public/'
  22. REMOTE_HOST = '10.2.0.10'
  23. REMOTE_USER = 'fratini'
  24. REMOTE_DIR = '/var/www/polizia'
  25. ADMIN_EMAIL = 'f.fratini@webmagistri.it'
  26. }
  27. stages {
  28. stage('Verify Host') {
  29. steps {
  30. sh 'hostname'
  31. sh 'hostname -I'
  32. sh 'whoami'
  33. }
  34. }
  35. stage('Get Code') {
  36. steps {
  37. checkout scm
  38. }
  39. }
  40. stage('Debug Branch Info') {
  41. steps {
  42. script {
  43. // Store the branch info for later use
  44. env.CURRENT_BRANCH = sh(script: 'git rev-parse --abbrev-ref HEAD || echo "HEAD"', returnStdout: true).trim()
  45. echo "Current branch detected as: ${env.CURRENT_BRANCH}"
  46. }
  47. }
  48. }
  49. stage('Deploy to Server') {
  50. when {
  51. expression {
  52. // Always deploy from develop branch or if we're in a detached HEAD state
  53. return env.CURRENT_BRANCH == 'HEAD' || env.CURRENT_BRANCH == 'develop' ||
  54. env.GIT_BRANCH == 'origin/develop' || env.BRANCH_NAME == 'develop'
  55. }
  56. }
  57. steps {
  58. echo "Starting deployment to ${REMOTE_HOST} as user ${REMOTE_USER}"
  59. sh '''
  60. # Make sure SSH directory exists with correct permissions
  61. mkdir -p ~/.ssh
  62. chmod 700 ~/.ssh
  63. # First, clean up the target directory to ensure we have permissions
  64. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "if [ -d '${REMOTE_DIR}' ]; then sudo rm -rf ${REMOTE_DIR}/*; else sudo mkdir -p ${REMOTE_DIR}; fi"
  65. # Ensure the directory is owned by our user
  66. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo chown -R ${REMOTE_USER}:${REMOTE_USER} ${REMOTE_DIR}"
  67. # Create a tar archive excluding unnecessary files
  68. tar --exclude='.git' --exclude='node_modules' --exclude='vendor' -czf /tmp/deployment.tar.gz .
  69. # Copy the archive to the remote server
  70. scp -o StrictHostKeyChecking=no /tmp/deployment.tar.gz ${REMOTE_USER}@${REMOTE_HOST}:/tmp/
  71. # Extract the archive on the remote server with --no-same-owner to avoid permission issues
  72. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && tar -xzf /tmp/deployment.tar.gz --no-same-owner"
  73. # Clean up
  74. rm -f /tmp/deployment.tar.gz
  75. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "rm -f /tmp/deployment.tar.gz"
  76. # Check for PHP
  77. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "php -v || echo 'PHP not available on remote server'"
  78. # Check for Composer and install it if missing
  79. echo "Checking for Composer..."
  80. COMPOSER_INSTALLED=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "command -v composer || echo 'not found'")
  81. if [[ "$COMPOSER_INSTALLED" == *"not found"* ]]; then
  82. echo "Installing Composer..."
  83. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd /tmp && curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer && sudo chmod +x /usr/local/bin/composer"
  84. else
  85. echo "Composer is already installed."
  86. fi
  87. # Run Composer install
  88. echo "Running composer install..."
  89. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && composer install --no-interaction --no-dev --prefer-dist"
  90. # Check for Node.js/NPM
  91. NODE_INSTALLED=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "command -v node || echo 'not found'")
  92. if [[ "$NODE_INSTALLED" == *"not found"* ]]; then
  93. echo "Node.js not found - skipping npm steps"
  94. else
  95. echo "Running npm install and build..."
  96. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && npm install && npm run build"
  97. fi
  98. # Set proper permissions for Laravel directories that need to be writable
  99. echo "Setting directory permissions..."
  100. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && mkdir -p bootstrap/cache storage/framework/sessions storage/framework/views storage/framework/cache storage/logs"
  101. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && chmod -R 775 storage bootstrap/cache"
  102. # Run Laravel artisan commands
  103. echo "Running Laravel artisan commands..."
  104. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan migrate --force || echo 'Migration failed, continuing...'"
  105. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan config:cache || echo 'Config cache failed, continuing...'"
  106. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan route:cache || echo 'Route cache failed, continuing...'"
  107. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan view:cache || echo 'View cache failed, continuing...'"
  108. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan optimize || echo 'Optimize failed, continuing...'"
  109. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan storage:link || echo 'Storage link failed, continuing...'"
  110. # Set final ownership for web server
  111. echo "Setting web server ownership..."
  112. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo chown -R www-data:www-data ${REMOTE_DIR}"
  113. # Restart services
  114. echo "Restarting services..."
  115. 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'"
  116. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo systemctl restart nginx || echo 'Nginx restart failed, may need manual intervention'"
  117. # Clear cache
  118. echo "Clearing cache..."
  119. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && sudo -u www-data php artisan cache:clear || echo 'Cache clear failed, continuing...'"
  120. '''
  121. }
  122. }
  123. }
  124. post {
  125. always {
  126. script {
  127. cleanWs()
  128. }
  129. }
  130. success {
  131. echo 'Build successful! The Polizia application is now deployed to 10.2.0.10'
  132. script {
  133. mail to: env.ADMIN_EMAIL,
  134. subject: 'Polizia - Build Successful',
  135. body: 'The build was successful and the Polizia application has been deployed to the server at 10.2.0.10'
  136. }
  137. }
  138. failure {
  139. echo 'Build failed! Please check the console output to fix the issues.'
  140. script {
  141. mail to: env.ADMIN_EMAIL,
  142. subject: 'Polizia - Build Failed',
  143. body: 'The build has failed. Please check Jenkins for details.'
  144. }
  145. }
  146. }
  147. }