209 lines
7.6 KiB
Groovy
209 lines
7.6 KiB
Groovy
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 {
|
|
def flutterHome = "/opt/flutter"
|
|
env.PATH = "${flutterHome}/bin:${env.PATH}"
|
|
sh 'flutter doctor -v'
|
|
}
|
|
script {
|
|
//def ANDROID_HOME = "/opt/flutter"
|
|
//env.PATH = "${flutterHome}/bin:${env.PATH}"
|
|
sh 'find /soft -name "*droid*"'
|
|
}
|
|
}
|
|
}
|
|
|
|
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!'
|
|
}
|
|
}
|
|
}
|