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