pipeline { agent any environment { FLUTTER_VERSION = '3.27.4' JAVA_VERSION = '17' ANDROID_BUILD_DIR = 'build' } options { buildDiscarder(logRotator(numToKeepStr: '10')) disableConcurrentBuilds() timeout(time: 1, unit: 'MINUTES') timestamps() } parameters { string(name: 'BUILD_TYPE', defaultValue: 'all', description: 'Build type: all, android, web') string(name: 'ANDROID_FLAVOR', defaultValue: 'release', description: 'Android build: debug, release') string(name: 'VERSION_NAME', defaultValue: '', description: 'Override version name (optional)') string(name: 'VERSION_CODE', defaultValue: '', description: 'Override version code (optional)') booleanParam(name: 'CLEAN_BUILD', defaultValue: true, description: 'Run flutter clean before build') } stages { stage('Preparation') { steps { script { def buildType = params.BUILD_TYPE.toLowerCase() if (buildType == 'all' || buildType == 'android') { currentBuild.description = "Android ${params.ANDROID_FLAVOR}" } else if (buildType == 'web') { currentBuild.description = "Web" } else { error("Unknown BUILD_TYPE: ${buildType}. Use 'all', 'android', or 'web'") } } } } stage('Environment Setup') { steps { script { //env.PATH = "/opt/flutter/bin/" sh '/opt/flutter/bin/flutter upgrade ' } } } stage('Flutter Deps') { when { expression { params.CLEAN_BUILD == true } } steps { sh 'flutter clean' } } stage('Install Dependencies') { steps { sh 'flutter pub get' } } stage('Analyze & Lint') { steps { sh 'flutter analyze --no-fatal-infos' } } stage('Tests') { steps { sh 'flutter test --concurrency=1' } post { always { junit allowEmptyResults: true, testResults: '**/test-results/*.xml' } } } stage('Build Android') { when { expression { def buildType = params.BUILD_TYPE.toLowerCase() buildType == 'all' || buildType == 'android' } } stages { stage('Build APK Debug') { when { expression { params.ANDROID_FLAVOR.toLowerCase() == 'debug' } } steps { script { def buildName = "debug" if (params.VERSION_NAME) buildName += "-${params.VERSION_NAME}" if (params.VERSION_CODE) buildName += "-${params.VERSION_CODE}" currentBuild.displayName = "#${currentBuild.number} - Android ${buildName}" def extraArgs = '' if (params.VERSION_NAME) extraArgs += " --build-name=${params.VERSION_NAME}" if (params.VERSION_CODE) extraArgs += " --build-number=${params.VERSION_CODE}" sh "flutter build apk --${buildName}${extraArgs}" } } post { success { archiveArtifacts artifacts: "build/app/outputs/flutter-apk/app-${buildName}.apk", fingerprint: true archiveArtifacts artifacts: "build/app/outputs/flutter-apk/*.apk", fingerprint: true } } } stage('Build APK Release') { when { expression { params.ANDROID_FLAVOR.toLowerCase() == 'release' } } steps { script { def buildName = "release" if (params.VERSION_NAME) buildName += "-${params.VERSION_NAME}" if (params.VERSION_CODE) buildName += "-${params.VERSION_CODE}" currentBuild.displayName = "#${currentBuild.number} - Android ${buildName}" def extraArgs = '' if (params.VERSION_NAME) extraArgs += " --build-name=${params.VERSION_NAME}" if (params.VERSION_CODE) extraArgs += " --build-number=${params.VERSION_CODE}" sh "flutter build apk --release${extraArgs}" } } post { success { archiveArtifacts artifacts: "build/app/outputs/flutter-apk/*.apk", fingerprint: true } } } stage('Build AAB Release') { when { expression { params.ANDROID_FLAVOR.toLowerCase() == 'release' } } steps { script { def extraArgs = '' if (params.VERSION_NAME) extraArgs += " --build-name=${params.VERSION_NAME}" if (params.VERSION_CODE) extraArgs += " --build-number=${params.VERSION_CODE}" sh "flutter build appbundle --release${extraArgs}" } } post { success { archiveArtifacts artifacts: "build/app/outputs/bundle/release/*.aab", fingerprint: true } } } } } stage('Build Web') { when { expression { def buildType = params.BUILD_TYPE.toLowerCase() buildType == 'all' || buildType == 'web' } } steps { script { currentBuild.displayName = "#${currentBuild.number} - Web" def extraArgs = '' if (params.VERSION_NAME) extraArgs += " --build-name=${params.VERSION_NAME}" if (params.VERSION_CODE) extraArgs += " --build-number=${params.VERSION_CODE}" sh "flutter build web --release${extraArgs}" } } post { success { archiveArtifacts artifacts: "build/web/**/*", fingerprint: true } } } } post { always { cleanWs() } success { echo 'Build completed successfully!' } failure { echo 'Build failed!' } } }