温馨提示×

centos下flutter持续集成怎么做

小樊
64
2025-09-22 06:56:09
栏目: 智能运维

CentOS下实现Flutter持续集成的步骤

1. 环境准备

在CentOS系统上,需先安装Flutter CI所需的依赖工具及环境:

  • 安装Java JDK:Flutter依赖Java运行,建议安装JDK 11及以上版本(推荐OpenJDK 17)。
    sudo yum install -y java-17-openjdk-devel
    java -version  # 验证安装
    
  • 安装Flutter SDK:从Flutter官网下载最新稳定版SDK,解压至指定目录(如/opt/flutter),并配置环境变量。
    sudo mkdir -p /opt/flutter
    sudo wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.19.0-stable.tar.xz -O /opt/flutter/flutter.tar.xz
    sudo tar -xf /opt/flutter/flutter.tar.xz -C /opt/flutter --strip-components=1
    echo 'export PATH="$PATH:/opt/flutter/bin"' >> ~/.bashrc
    source ~/.bashrc
    
  • 验证Flutter环境:运行flutter doctor,检查是否缺少依赖(如Android SDK、Xcode等,根据目标平台补充)。

2. 选择CI工具

推荐使用Jenkins(开源、灵活)或GitHub Actions(云端、易集成)作为CI工具。以下分别说明配置方法:

2.1 使用Jenkins配置Flutter CI
  • 安装Jenkins:在CentOS上通过yum安装Jenkins,启动服务并设置开机自启。
    sudo yum install -y jenkins
    sudo systemctl start jenkins
    sudo systemctl enable jenkins
    
  • 配置Jenkins全局工具
    1. 进入Jenkins Web界面(http://<服务器IP>:8080),完成初始设置。
    2. 进入「Manage Jenkins」→「Global Tool Configuration」,添加Flutter SDK路径(如/opt/flutter)。
    3. 添加Android SDK(若构建Android应用):下载Android SDK Command Line Tools,解压至指定目录(如/opt/android-sdk),并在Jenkins中配置路径。
  • 创建Jenkins Pipeline
    1. 新建「Pipeline」类型任务,配置Git仓库地址(如https://github.com/your-repo/flutter-app.git)。
    2. 在「Pipeline」脚本中编写Jenkinsfile(示例见下文),定义CI流程。
2.2 使用GitHub Actions配置Flutter CI

若项目托管在GitHub上,可通过GitHub Actions实现云端CI:

  1. 在项目根目录创建.github/workflows/flutter-ci.yml文件。
  2. 编写YAML配置(示例见下文),定义触发条件(如pushpull_request)及流程。

3. 编写CI流程(以Jenkinsfile为例)

以下是一个完整的Jenkinsfile示例,覆盖依赖安装、代码分析、测试、构建、部署流程:

pipeline {
    agent any
    environment {
        FLUTTER_HOME = '/opt/flutter'
        PATH = "$FLUTTER_HOME/bin:$PATH"
        ANDROID_SDK_ROOT = '/opt/android-sdk'  // Android SDK路径(可选)
    }
    stages {
        // 1. 检出代码
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/your-repo/flutter-app.git'
            }
        }
        // 2. 安装依赖
        stage('Install Dependencies') {
            steps {
                sh 'flutter pub get'
            }
        }
        // 3. 代码静态分析
        stage('Analyze') {
            steps {
                sh 'flutter analyze'
            }
        }
        // 4. 运行测试
        stage('Run Tests') {
            parallel {
                stage('Unit Test') {
                    steps {
                        sh 'flutter test'
                    }
                }
                stage('Widget Test') {
                    steps {
                        sh 'flutter test test_driver/'
                    }
                }
            }
        }
        // 5. 构建应用(多平台)
        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
                    }
                }
                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'
                    }
                }
            }
        }
    }
    post {
        // 6. 发布结果
        always {
            junit '**/test-results/**/*.xml'  // 发布测试报告
            emailext body: 'Flutter CI完成,详情:${BUILD_URL}', subject: 'Flutter CI状态'
        }
        // 7. 部署应用(可选)
        success {
            script {
                if (env.BRANCH_NAME == 'release') {
                    // 部署iOS IPA(需配置Fastlane)
                    sh 'fastlane deliver --ipa build/ios/ipa/*.ipa --username your_apple_id'
                } else {
                    // 部署Android APK至测试服务器
                    sshPublisher(
                        transfers: [
                            sshTransfer(
                                remoteDirectory: '/var/www/test-env',
                                sourceFiles: 'build/app/outputs/**/*.apk'
                            )
                        ]
                    )
                }
            }
        }
    }
}

关键说明

  • 多平台构建:Android构建可在CentOS上完成,iOS构建需指定Mac节点(通过agent { label 'mac' })。
  • 环境变量:通过environment块配置Flutter、Android SDK路径,确保Pipeline可访问。
  • 部署集成:通过sshPublisher(Android)或fastlane(iOS)实现自动部署,需提前配置对应工具。

4. 验证CI流程

  1. 提交代码至Git仓库(如GitHub),触发CI流程(如Jenkins自动构建或GitHub Actions运行)。
  2. 查看CI工具的控制台输出,确认各阶段(依赖安装、测试、构建)是否成功。
  3. 检查部署结果(如Android APK是否上传至测试服务器,iOS IPA是否发布至App Store Connect)。

注意事项

  • iOS构建限制:iOS应用必须在Mac环境中构建,若CentOS无Mac节点,需使用云服务(如GitHub Actions的Mac runner、Codemagic的Mac mini池)。
  • 依赖管理:确保Jenkins或GitHub Actions的环境与本地开发环境一致(如Flutter版本、Android SDK版本),避免因环境差异导致构建失败。
  • 安全性:避免在Pipeline中硬编码敏感信息(如API密钥、Apple ID密码),通过CI工具的Secrets功能管理。

通过以上步骤,即可在CentOS上实现Flutter项目的持续集成,自动化完成代码测试、构建及部署流程,提升开发效率。

0