Загрузка данных


pipeline {
    agent any

    environment {
        DOCKER_IMAGE = 'rexoided/my-laravel-app'
        DOCKER_CREDENTIALS_ID = 'docker-hub'
    }

    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://gitlab.irkat.ru/23322/my-laravel-app.git'
            }
        }

        stage('Build Docker Image') {
            steps {
                script {
                    dockerImage = docker.build("${env.DOCKER_IMAGE}:${env.BUILD_ID}")
                }
            }
        }

        stage('Run Tests') {
            steps {
                script {
                    dockerImage.inside("--rm") {
                        // Установка зависимостей
                        sh 'composer install --no-dev --optimize-autoloader --no-cache'

                        // Вариант 1: запуск тестов через PHPUnit напрямую (рекомендуемый)
                        sh 'vendor/bin/phpunit --env=testing'

                        /*
                        // Вариант 2: если хотите использовать artisan test,
                        // сначала установите пакет collision
                        // sh 'composer require --dev nunomaduro/collision'
                        // sh 'php artisan test --env=testing'
                        */
                    }
                }
            }
        }

        stage('Push Docker Image') {
            when {
                beforeAgent true
                expression { currentBuild.result != 'FAILURE' }
            }
            steps {
                script {
                    docker.withRegistry('https://index.docker.io/v1/', "${env.DOCKER_CREDENTIALS_ID}") {
                        dockerImage.push("${env.BUILD_ID}")
                        dockerImage.push('latest')
                    }
                }
            }
        }

        stage('Deploy') {
            when {
                beforeAgent true
                expression { currentBuild.result != 'FAILURE' }
            }
            steps {
                script {
                    sh 'docker stop my-running-app || true'
                    sh 'docker rm my-running-app || true'
                    sh "docker run -d -p 8080:80 --name my-running-app ${env.DOCKER_IMAGE}:${env.BUILD_ID}"
                }
            }
        }
    }

    post {
        always {
            sh 'docker image prune -f'
        }
        failure {
            echo 'Pipeline failed!'
            // Здесь можно добавить уведомления (email, Slack и т. д.)
        }
        success {
            echo 'Pipeline succeeded!'
        }
    }
}