Jenkins + Flutter Android 自动打包与上传教程
本文介绍如何在 Jenkins 中配置 Flutter 项目的 Android 打包流水线,并通过 Python 脚本上传 APK 文件。
环境准备
-
安装 Flutter SDK
将 Flutter SDK 安装到服务器,并配置好环境变量。 -
安装 Jenkins 插件
- Git 插件
- Pipeline 插件
-
SSH Agent 插件(如果需要使用 SSH 拉取代码)
-
准备 Android 签名文件
在 Android 项目中配置好key.properties,并保证 keystore 文件路径正确。 -
准备上传脚本
使用 Python 脚本(如upload.py)实现 APK 上传逻辑,例如上传到内网服务器或第三方平台。
Jenkinsfile 流水线说明
流水线包含以下几个阶段:
-
Clean Workspace
清理工作区,避免残留文件影响构建。 -
Checkout Code
从 Git 仓库拉取指定分支代码。 -
Check Flutter Version
打印当前使用的 Flutter SDK 路径和版本,确保环境正确。 -
Flutter Pub Get
执行flutter pub get安装依赖。 -
Build Android Release APK
使用 Flutter 构建发布版本 APK,支持多架构。 -
Find and Copy APK
在构建目录中查找 APK 文件,并复制到指定输出路径。 -
Publish APK using Python Script
调用 Python 脚本上传 APK 文件。 -
Post Always
无论构建是否成功,最后都清理工作区。
完整 Jenkinsfile
pipeline {
agent any
environment {
// Flutter SDK 路径
FLUTTER_ROOT = '/Users/<用户名>/jenkins/ios_project/flutter'
PATH = "/Users/<用户名>/jenkins/ios_project/flutter/bin:${env.PATH}"
// Android keystore 路径
ANDROID_KEYSTORE = '/Users/<用户名>/jenkins/ios_project/my-release-key.keystore'
// APK 导出和上传路径
EXPORT_DIR = '/Users/<用户名>/jenkins/ios_project/android'
APK_OUTPUT_PATH = '/Users/<用户名>/jenkins/ios_project/android/apk'
UPLOAD_SCRIPT = '/Users/<用户名>/jenkins/ios_project/android/upload.py'
}
parameters {
string(name: 'BRANCH_NAME', defaultValue: 'test', description: 'Git 分支名')
}
stages {
stage('Clean Workspace') {
steps {
sh 'rm -rf project_dir'
}
}
stage('Checkout Code') {
steps {
sshagent(credentials: ['your-ssh-credential-id']) {
sh "git clone -b ${params.BRANCH_NAME} git@your.git.repo:your_project.git"
}
}
}
stage('Check Flutter Version') {
steps {
sh '''
echo "Flutter path: $(which flutter)"
flutter --version
'''
}
}
stage('Flutter Pub Get') {
steps {
dir('project_dir') {
sh "${FLUTTER_ROOT}/bin/flutter pub get"
}
}
}
stage('Build Android Release APK') {
steps {
dir('project_dir') {
sh """
${FLUTTER_ROOT}/bin/flutter build apk --release --no-shrink --target-platform android-arm,android-arm64,android-x64
"""
}
}
}
stage('Find and Copy APK') {
steps {
script {
def apkPath = findFiles(glob: '**/build/app/outputs/flutter-apk/app-release.apk')
if (apkPath && apkPath.length > 0) {
env.APK_PATH = apkPath[0].path
echo "找到 APK 文件: ${env.APK_PATH}"
// 创建 APK 输出目录并复制 APK
sh "mkdir -p ${APK_OUTPUT_PATH}"
sh "cp ${env.APK_PATH} ${APK_OUTPUT_PATH}/"
echo "APK 已复制到: ${APK_OUTPUT_PATH}"
} else {
error "未找到 APK 文件"
}
}
}
}
stage('Publish APK using Python Script') {
steps {
script {
def apkFilePath = "${APK_OUTPUT_PATH}/app-release.apk"
echo "调用 Python 脚本上传 APK: ${apkFilePath}"
sh "python3 ${UPLOAD_SCRIPT} ${apkFilePath}"
}
}
}
}
post {
always {
cleanWs()
}
}
}
完成以上配置后,每次构建 Jenkins 流水线时,都会自动:
- 拉取代码
- 安装依赖
- 编译生成 APK
- 将 APK 拷贝到指定目录
- 调用 Python 脚本上传
这样即可实现 Android 自动打包与分发。