|
|
@@ -0,0 +1,160 @@
|
|
|
+pipeline {
|
|
|
+ agent {
|
|
|
+ docker {
|
|
|
+ image 'php:8.2-fpm'
|
|
|
+ args '-u root'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 'apt-get update && apt-get install -y git zip unzip libzip-dev libonig-dev libicu-dev openssh-client'
|
|
|
+ sh 'docker-php-ext-install pdo_mysql zip mbstring intl'
|
|
|
+ sh 'curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer'
|
|
|
+ sh 'php -v'
|
|
|
+ sh 'composer --version'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Get Code') {
|
|
|
+ steps {
|
|
|
+ checkout scm
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Install Dependencies') {
|
|
|
+ steps {
|
|
|
+ sh 'composer install --no-interaction --no-progress --prefer-dist'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 'apt-get install -y nodejs npm'
|
|
|
+ sh 'npm install'
|
|
|
+ sh 'npm run 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}'"
|
|
|
+
|
|
|
+ // Create a tar archive of the project
|
|
|
+ sh 'tar -czf project.tar.gz --exclude=node_modules --exclude=vendor --exclude=.git .'
|
|
|
+
|
|
|
+ // Transfer the archive to remote server
|
|
|
+ sh "scp -o StrictHostKeyChecking=no project.tar.gz ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"
|
|
|
+
|
|
|
+ // Extract on remote server and setup
|
|
|
+ sh """
|
|
|
+ ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && \
|
|
|
+ tar -xzf project.tar.gz && \
|
|
|
+ rm project.tar.gz && \
|
|
|
+ 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 && \
|
|
|
+ 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'"
|
|
|
+ sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl restart nginx'"
|
|
|
+
|
|
|
+ // 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.'
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|