在CentOS系统上,需先安装Jenkins(CI服务器)、Flutter SDK及依赖工具,并配置环境变量。
sudo yum install -y jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
snap安装(避免手动配置Linux toolchain),或手动下载SDK:sudo yum install -y epel-release # 启用EPEL仓库
sudo yum install -y snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install flutter --classic # 安装Flutter
source /etc/profile # 使环境变量生效
~/.bashrc:echo 'export PATH="$PATH:/opt/flutter/bin:/var/lib/snapd/snap/bin"' >> ~/.bashrc
source ~/.bashrc
clang、cmake、ninja-build等工具,通过yum安装:sudo yum install -y clang cmake ninja-build pkgconfig libgtk-3-dev liblzma-dev
sudo yum install -y http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
sudo yum update git
export PATH="$PATH:/var/lib/snapd/snap/bin:/opt/flutter/bin"
git依赖,建议切换至SSH协议(避免HTTP密码暴露)。在Jenkins任务脚本中替换pubspec.yaml中的git链接:sed -i 's|https://xxxxxxx/|git@xxxxxxxx:|g' pubspec.yaml
并在Jenkins服务器上生成SSH密钥,添加至Git仓库授权。在Flutter项目根目录创建Jenkinsfile,定义CI/CD流程(以多平台构建为例):
pipeline {
agent any
environment {
FLUTTER_HOME = '/opt/flutter'
PATH = "$FLUTTER_HOME/bin:$PATH"
}
stages {
// 1. 环境检查与依赖安装
stage('Setup') {
steps {
sh 'flutter doctor -v' // 检查Flutter环境
sh 'flutter pub get' // 获取依赖
}
}
// 2. 代码分析与静态检查
stage('Analyze') {
steps {
sh 'flutter analyze' // 检查代码风格与潜在错误
}
}
// 3. 运行测试
stage('Test') {
parallel {
stage('Unit Test') {
steps {
sh 'flutter test' // 运行单元测试
}
}
stage('Widget Test') {
steps {
sh 'flutter test test_driver/' // 运行Widget测试
}
}
}
}
// 4. 构建产物
stage('Build') {
parallel {
stage('Android APK') {
when { branch 'dev' } // 仅在dev分支构建Android APK
steps {
sh 'flutter build apk --release --dart-define=API_ENV=prod --target-platform android-arm64'
archiveArtifacts artifacts: 'build/app/outputs/flutter-apk/*.apk', fingerprint: true // 归档APK
}
}
stage('iOS IPA') {
agent { label 'mac' } // 需指定Mac节点(iOS构建必需)
when { branch 'release' } // 仅在release分支构建iOS IPA
steps {
sh 'flutter build ipa --export-options-plist=ios/ExportOptions.plist --dart-define=API_ENV=prod'
stash name: 'ios_build', includes: 'build/ios/ipa/*.ipa' // 存储IPA文件
}
}
}
}
// 5. 部署产物
stage('Deploy') {
steps {
script {
if (env.BRANCH_NAME == 'release') {
// iOS部署:使用fastlane上传至App Store
sh 'fastlane deliver'
} else {
// Android部署:通过SSH上传至测试服务器
sshPublisher(
transfers: [
sshTransfer(
remoteDirectory: '/var/www/test-env',
sourceFiles: 'build/app/outputs/**/*.apk'
)
]
)
}
}
}
}
}
post {
always {
junit '**/test-results/**/*.xml' // 发布测试报告
emailext body: '构建详情:${BUILD_URL}', subject: 'Flutter构建完成' // 发送邮件通知
}
}
}
flutter pub cache repair)提升构建速度。通过以上步骤,即可在CentOS上实现Flutter项目的持续集成,自动化完成环境检查、代码测试、构建产物生成及部署流程。