241 lines
No EOL
8.3 KiB
Groovy
241 lines
No EOL
8.3 KiB
Groovy
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
APP_ENV = 'testing'
|
|
DB_CONNECTION = 'mysql'
|
|
DB_HOST = 'mysql'
|
|
DB_PORT = '3306'
|
|
DB_DATABASE = 'ffr_testing'
|
|
DB_USERNAME = 'ffr_user'
|
|
DB_PASSWORD = 'ffr_password'
|
|
CACHE_STORE = 'array'
|
|
SESSION_DRIVER = 'array'
|
|
QUEUE_CONNECTION = 'sync'
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('Setup Environment') {
|
|
steps {
|
|
script {
|
|
sh '''
|
|
echo "Setting up environment for testing..."
|
|
cp .env.example .env.testing
|
|
echo "APP_ENV=testing" >> .env.testing
|
|
echo "DB_CONNECTION=${DB_CONNECTION}" >> .env.testing
|
|
echo "DB_HOST=${DB_HOST}" >> .env.testing
|
|
echo "DB_PORT=${DB_PORT}" >> .env.testing
|
|
echo "DB_DATABASE=${DB_DATABASE}" >> .env.testing
|
|
echo "DB_USERNAME=${DB_USERNAME}" >> .env.testing
|
|
echo "DB_PASSWORD=${DB_PASSWORD}" >> .env.testing
|
|
echo "CACHE_STORE=${CACHE_STORE}" >> .env.testing
|
|
echo "SESSION_DRIVER=${SESSION_DRIVER}" >> .env.testing
|
|
echo "QUEUE_CONNECTION=${QUEUE_CONNECTION}" >> .env.testing
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Install Dependencies') {
|
|
parallel {
|
|
stage('PHP Dependencies') {
|
|
steps {
|
|
sh '''
|
|
echo "Installing PHP dependencies..."
|
|
composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev
|
|
'''
|
|
}
|
|
}
|
|
stage('Node Dependencies') {
|
|
steps {
|
|
sh '''
|
|
echo "Installing Node.js dependencies..."
|
|
npm ci
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Generate Application Key') {
|
|
steps {
|
|
sh '''
|
|
php artisan key:generate --env=testing --force
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Database Setup') {
|
|
steps {
|
|
sh '''
|
|
echo "Setting up test database..."
|
|
php artisan migrate:fresh --env=testing --force
|
|
php artisan config:clear --env=testing
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Code Quality Checks') {
|
|
parallel {
|
|
stage('PHP Syntax Check') {
|
|
steps {
|
|
sh '''
|
|
echo "Checking PHP syntax..."
|
|
find . -name "*.php" -not -path "./vendor/*" -not -path "./node_modules/*" -exec php -l {} \\;
|
|
'''
|
|
}
|
|
}
|
|
stage('PHPStan Analysis') {
|
|
steps {
|
|
script {
|
|
try {
|
|
sh '''
|
|
if [ -f "phpstan.neon" ]; then
|
|
echo "Running PHPStan static analysis..."
|
|
./vendor/bin/phpstan analyse --no-progress --error-format=table
|
|
else
|
|
echo "PHPStan configuration not found, skipping static analysis"
|
|
fi
|
|
'''
|
|
} catch (Exception e) {
|
|
unstable(message: "PHPStan found issues")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
stage('Security Audit') {
|
|
steps {
|
|
script {
|
|
try {
|
|
sh '''
|
|
echo "Running security audit..."
|
|
composer audit
|
|
'''
|
|
} catch (Exception e) {
|
|
unstable(message: "Security vulnerabilities found")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Unit Tests') {
|
|
steps {
|
|
sh '''
|
|
echo "Running Unit Tests..."
|
|
php artisan test tests/Unit/ --env=testing --stop-on-failure
|
|
'''
|
|
}
|
|
post {
|
|
always {
|
|
publishTestResults testResultsPattern: 'tests/Unit/results/*.xml'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Feature Tests') {
|
|
steps {
|
|
sh '''
|
|
echo "Running Feature Tests..."
|
|
php artisan test tests/Feature/ --env=testing --stop-on-failure
|
|
'''
|
|
}
|
|
post {
|
|
always {
|
|
publishTestResults testResultsPattern: 'tests/Feature/results/*.xml'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Full Regression Test Suite') {
|
|
steps {
|
|
sh '''
|
|
echo "Running comprehensive regression test suite..."
|
|
chmod +x ./run-regression-tests.sh
|
|
./run-regression-tests.sh
|
|
'''
|
|
}
|
|
post {
|
|
always {
|
|
// Archive test results
|
|
archiveArtifacts artifacts: 'tests/reports/**/*', allowEmptyArchive: true
|
|
|
|
// Publish coverage reports if available
|
|
publishHTML([
|
|
allowMissing: false,
|
|
alwaysLinkToLastBuild: true,
|
|
keepAll: true,
|
|
reportDir: 'coverage',
|
|
reportFiles: 'index.html',
|
|
reportName: 'Coverage Report'
|
|
])
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Performance Tests') {
|
|
steps {
|
|
script {
|
|
try {
|
|
sh '''
|
|
echo "Running performance tests..."
|
|
|
|
# Test memory usage
|
|
php -d memory_limit=256M artisan test tests/Feature/DatabaseIntegrationTest.php --env=testing
|
|
|
|
# Test response times for API endpoints
|
|
time php artisan test tests/Feature/ApiEndpointRegressionTest.php --env=testing
|
|
'''
|
|
} catch (Exception e) {
|
|
unstable(message: "Performance tests indicated potential issues")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Build Assets') {
|
|
when {
|
|
anyOf {
|
|
branch 'main'
|
|
branch 'develop'
|
|
}
|
|
}
|
|
steps {
|
|
sh '''
|
|
echo "Building production assets..."
|
|
npm run build
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
// Clean up
|
|
sh '''
|
|
echo "Cleaning up..."
|
|
rm -f .env.testing
|
|
'''
|
|
}
|
|
success {
|
|
echo '✅ All regression tests passed successfully!'
|
|
// Notify success (customize as needed)
|
|
// slackSend channel: '#dev-team', color: 'good', message: "Regression tests passed for ${env.JOB_NAME} - ${env.BUILD_NUMBER}"
|
|
}
|
|
failure {
|
|
echo '❌ Regression tests failed!'
|
|
// Notify failure (customize as needed)
|
|
// slackSend channel: '#dev-team', color: 'danger', message: "Regression tests failed for ${env.JOB_NAME} - ${env.BUILD_NUMBER}"
|
|
}
|
|
unstable {
|
|
echo '⚠️ Tests completed with warnings'
|
|
}
|
|
}
|
|
} |