Jenkinsfile 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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' // Updated to the correct path
  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. # Create remote directory
  64. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p ${REMOTE_DIR}"
  65. # Create a tar archive excluding unnecessary files
  66. tar --exclude='.git' --exclude='node_modules' --exclude='vendor' -czf /tmp/deployment.tar.gz .
  67. # Copy the archive to the remote server
  68. scp -o StrictHostKeyChecking=no /tmp/deployment.tar.gz ${REMOTE_USER}@${REMOTE_HOST}:/tmp/
  69. # Extract the archive on the remote server
  70. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "tar -xzf /tmp/deployment.tar.gz -C ${REMOTE_DIR}/"
  71. # Clean up
  72. rm -f /tmp/deployment.tar.gz
  73. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "rm -f /tmp/deployment.tar.gz"
  74. # Check for PHP
  75. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "php -v || echo 'PHP not available on remote server'"
  76. # Check for Composer and install it if missing
  77. echo "Checking for Composer..."
  78. COMPOSER_INSTALLED=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "command -v composer || echo 'not found'")
  79. if [[ "$COMPOSER_INSTALLED" == *"not found"* ]]; then
  80. echo "Installing Composer..."
  81. 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"
  82. else
  83. echo "Composer is already installed."
  84. fi
  85. # Run Composer install
  86. echo "Running composer install..."
  87. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && composer install --no-interaction --no-dev --prefer-dist"
  88. # Check for Node.js/NPM
  89. NODE_INSTALLED=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "command -v node || echo 'not found'")
  90. if [[ "$NODE_INSTALLED" == *"not found"* ]]; then
  91. echo "Node.js not found - skipping npm steps"
  92. else
  93. echo "Running npm install and build..."
  94. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && npm install && npm run build"
  95. fi
  96. # Run Laravel artisan commands
  97. echo "Running Laravel artisan commands..."
  98. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan migrate --force || echo 'Migration failed, continuing...'"
  99. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan config:cache || echo 'Config cache failed, continuing...'"
  100. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan route:cache || echo 'Route cache failed, continuing...'"
  101. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan view:cache || echo 'View cache failed, continuing...'"
  102. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan optimize || echo 'Optimize failed, continuing...'"
  103. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan storage:link || echo 'Storage link failed, continuing...'"
  104. # Set permissions
  105. echo "Setting permissions..."
  106. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && chmod -R 775 storage bootstrap/cache && sudo chown -R www-data:www-data ."
  107. # Restart services
  108. echo "Restarting services..."
  109. 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'"
  110. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo systemctl restart nginx || echo 'Nginx restart failed, may need manual intervention'"
  111. # Clear cache
  112. echo "Clearing cache..."
  113. ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "cd ${REMOTE_DIR} && php artisan cache:clear || echo 'Cache clear failed, continuing...'"
  114. '''
  115. }
  116. }
  117. }
  118. post {
  119. always {
  120. script {
  121. cleanWs()
  122. }
  123. }
  124. success {
  125. echo 'Build successful! The Polizia application is now deployed to 10.2.0.10'
  126. script {
  127. mail to: env.ADMIN_EMAIL,
  128. subject: 'Polizia - Build Successful',
  129. body: 'The build was successful and the Polizia application has been deployed to the server at 10.2.0.10'
  130. }
  131. }
  132. failure {
  133. echo 'Build failed! Please check the console output to fix the issues.'
  134. script {
  135. mail to: env.ADMIN_EMAIL,
  136. subject: 'Polizia - Build Failed',
  137. body: 'The build has failed. Please check Jenkins for details.'
  138. }
  139. }
  140. }
  141. }