Flutter CI/CD 和自托管的 GitHub Action

CI/CD 简介

持续集成(CI)和持续部署(CD)是现代软件开发流程中的两个重要概念,它们有助于提高软件质量和加快交付速度。

2.1 持续集成(CI)

持续集成指的是在代码库中每次提交代码后自动运行一系列的测试。这样可以确保代码的改动不会破坏现有的功能。

2持续部署(CD)

持续部署则是在持续集成的的基础上,将通过测试的代码自动部署到生产环境中。这意味着每次提交代码后,只要通过了测试,代码就会立即上线。
创建 CI/CD 配置文件

在项目根目录下创建一个.github/workflows 文件夹,并在该文件夹中创建一个 YAML 配置文件,例如 ci.yml。

# .github/workflows/ci.yml
name: Continuous Integration

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Dart
      uses: actions/setup-dart@v1
      with:
        dart-version: '2.12.3'
    - name: Install dependencies
      run: pub get
    - name: Build app
      run: flutter build apk --release

4.3 配置构建、测试和部署步骤

在上面的配置文件中,我们定义了一个工作流,它在代码推送到 main 分支或者有针对 main 分支的 pull request 时触发。工作流包括以下步骤:

检出代码。
设置 Dart 环境。
安装项目依赖。
构建应用。
对于持续部署(CD),可以创建另一个工作流或者扩展上述工作流,添加部署到生产环境的步骤。

6.1.1 构建 APK

对于 Android 项目,可以构建 APK(Android Package)文件。

- name: Build APK
  run: flutter build apk --split-debug-info=/path/

6.1.2 构建 IPA

对于 iOS 项目,可以构建 IPA(iOS App Store Package)文件。

- name: Build IPA
  run: flutter build ios --no-codesign

6.2 自动化打包

自动化打包指的是将构建产物打包成可发布的格式,例如上传到应用商店或者企业分发。

6.2.1 上传 APK 到 Firebase App Distribution

如果使用 Firebase App Distribution,可以将 APK 直接上传。

- name: Upload APK to Firebase App Distribution
  uses: firebase/firebase-app-distribution-action@v1
  with:
    app: ${{ secrets.FIREBASE_APP_ID }}
    token: ${{ secrets.FIREBASE_APP_DISTRIBUTION_TOKEN }}
    file: build/app/outputs/flutter-apk/release/app-release.apk
    release_notes: "New release notes"

6.2.2 上传 IPA 到 TestFlight

对于 iOS 应用,可以使用 Xcode 命令行工具将 IPA 上传到 TestFlight。

- name: Upload IPA to TestFlight
  run: |
    xcodebuild -archivePath build/ios/archive.xcarchive -exportPath build/ios/export -exportOptionsPlist exportOptions.plist
    gym --exportArchive --archivePath build/ios/archive.xcarchive --exportPath build/ios/export --exportOptionsPlist exportOptions.plist
  env:
    XCODE.apple_id: ${{ secrets.XCODE_APPLE_ID }}
    XCODE.team_id: ${{ secrets.XCODE_TEAM_ID }}
    XCODE.password: ${{ secrets.XCODE_PASSWORD }}

通过自动化构建和打包,可以确保每次代码提交后都能快速生成可发布的软件包,并且可以自动化地进行版本管理和发布,大大提高了软件开发的效率和质量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容