[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ci-cd-chto-takoe-jenkinsfile-i-chem-otlichaetsya-declarative-pipeline-ot-scripted-pipeline":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":21,"progress":22,"seo":23},196,"chto-takoe-jenkinsfile-i-chem-otlichaetsya-declarative-pipeline-ot-scripted-pipeline",6,"ci-cd","CI\u002FCD","🔄","Что такое Jenkinsfile и чем отличается Declarative Pipeline от Scripted Pipeline","**Jenkinsfile** — это текстовый файл, содержащий описание CI\u002FCD пайплайна на Groovy DSL. Хранится в корне репозитория проекта вместе с исходным кодом, что реализует подход **Pipeline as Code** — пайплайн версионируется, проходит code review и имеет полную историю изменений.\n\n### Declarative Pipeline (рекомендуемый)\n\nDeclarative Pipeline использует строго структурированный синтаксис с предопределенными секциями. Jenkins валидирует его ещё до запуска, что позволяет обнаружить синтаксические ошибки заранее.\n\n\u003Cdetails>\n\u003Csummary>Пример Declarative Pipeline\u003C\u002Fsummary>\n\n```groovy\npipeline {\n    agent any\n\n    environment {\n        MAVEN_OPTS = '-Xmx1024m'\n    }\n\n    stages {\n        stage('Build') {\n            steps {\n                sh 'mvn clean compile'\n            }\n        }\n        stage('Test') {\n            steps {\n                sh 'mvn test'\n            }\n            post {\n                always {\n                    junit '**\u002Ftarget\u002Fsurefire-reports\u002F*.xml'\n                }\n            }\n        }\n        stage('Package') {\n            steps {\n                sh 'mvn package -DskipTests'\n            }\n        }\n    }\n\n    post {\n        success {\n            echo 'Pipeline succeeded!'\n        }\n        failure {\n            mail to: 'team@company.com',\n                 subject: \"FAILED: ${env.JOB_NAME}\",\n                 body: \"Build ${env.BUILD_NUMBER} failed.\"\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Scripted Pipeline (полноценный Groovy)\n\nScripted Pipeline дает полную свободу Groovy-кода: циклы, условия, обработка исключений — все возможности языка программирования.\n\n\u003Cdetails>\n\u003Csummary>Пример Scripted Pipeline\u003C\u002Fsummary>\n\n```groovy\nnode('java17-maven') {\n    try {\n        stage('Build') {\n            checkout scm\n            sh 'mvn clean compile'\n        }\n        stage('Test') {\n            sh 'mvn test'\n        }\n        stage('Package') {\n            sh 'mvn package -DskipTests'\n        }\n    } catch (e) {\n        currentBuild.result = 'FAILURE'\n        throw e\n    } finally {\n        junit '**\u002Ftarget\u002Fsurefire-reports\u002F*.xml'\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Сравнение Declarative и Scripted Pipeline\n\n| Критерий | Declarative Pipeline | Scripted Pipeline |\n|---|---|---|\n| Синтаксис | Структурированный, строгий | Свободный Groovy |\n| Простота | Проще для новичков | Сложнее, требует знания Groovy |\n| Гибкость | Ограниченная (но есть блок `script {}`) | Полная |\n| Валидация | Валидируется до запуска | Ошибки обнаруживаются в runtime |\n| Секция `post` | Встроенная поддержка | Реализуется через `try\u002Fcatch\u002Ffinally` |\n| Рестарт со стадии | Поддерживается | Не поддерживается |\n| Рекомендация Jenkins | Рекомендуется | Для сложных случаев |\n\n### Блок script внутри Declarative Pipeline\n\nЕсли в декларативном пайплайне нужна сложная логика, можно использовать блок `script {}`:\n\n```groovy\nstage('Conditional Logic') {\n    steps {\n        script {\n            if (env.BRANCH_NAME == 'main') {\n                sh 'mvn deploy'\n            } else {\n                echo 'Skipping deploy for non-main branch'\n            }\n        }\n    }\n}\n```\n\n### Вывод\n\nВ большинстве проектов рекомендуется использовать **Declarative Pipeline** как более читаемый и поддерживаемый вариант. Scripted Pipeline оправдан только для действительно сложной логики, которую невозможно выразить декларативно. В банковской практике Declarative Pipeline предпочтителен, так как его проще стандартизировать и проверять на code review.\n\n> **На собеседовании:** классический вопрос — объяснить разницу между двумя типами пайплайнов и обосновать выбор. Упомяните, что Declarative Pipeline поддерживает рестарт с конкретной стадии, что важно для длительных пайплайнов, а Scripted — нет.","","middle",[15,16,17,18,19,20],"groovy","declarative-pipeline","jenkins","cicd","jenkinsfile","scripted-pipeline",[],null,{"title":24,"description":25,"ogTitle":26,"ogDescription":27,"keywords":28,"schemaAnswer":34,"featuredSnippetReady":35},"Jenkinsfile — Declarative vs Scripted Pipeline — сравнение — Gymterview","Jenkinsfile описывает CI\u002FCD пайплайн на Groovy DSL. Declarative — структурированный и рекомендуемый. Scripted — полноценный Groovy для сложных случаев.","Jenkinsfile — Declarative vs Scripted Pipeline: что выбрать","Declarative Pipeline — строгий синтаксис, валидация до запуска, секция post. Scripted — полный Groovy, гибкость, ошибки в runtime. Рекомендуется Declarative.",[29,30,31,32,33],"Jenkinsfile что это","Declarative Pipeline","Scripted Pipeline","Declarative vs Scripted","Pipeline as Code Jenkins","Jenkinsfile — текстовый файл с описанием CI\u002FCD пайплайна на Groovy DSL, хранится в корне репозитория. Declarative Pipeline — структурированный синтаксис, проще, валидируется до запуска, рекомендуется Jenkins. Scripted Pipeline — полноценный Groovy, максимальная гибкость, но сложнее и ошибки только в runtime.",true]