CI/CD,即持续集成(Continuous Integration)和持续交付/部署(Continuous Delivery/Deployment),是一种软件开发实践,通过引入自动化的构建、测试和部署过程,来提升软件质量并加速交付周期;
使用 CI/CD 可以协助开发和运维人员保障我们软件工程质量
频繁的集成
在CI/CD流程中,开发人员会频繁地将代码合并到主分支,这可以避免长时间的分支开发导致的集成问题。
自动化构建和测试
每次代码变动都会触发自动化的构建和测试过程,这样可以及时发现并解决问题,而不是在软件开发周期的后期进行手动测试。自动化测试覆盖了单元测试、集成测试、功能测试、性能测试等,保证了代码的健壮性和可靠性。
快速反馈
如果在构建或测试阶段发现任何问题,开发人员会立即收到通知。这样,问题可以在早期阶段解决,修复的成本和影响将降到最低。
一致性的构建和部署环境
CI/CD可以确保在同一环境中构建和部署软件,从而避免了“在我机器上运行得好好的”问题。通过容器化技术,可以确保开发、测试和生产环境的一致性。
自动化部署
在持续部署模型中,如果所有的测试都通过,新的代码变更将自动部署到生产环境。这降低了人为错误,并加快了软件交付的速度。
版本控制
CI/CD工具链通常与版本控制系统(如Git)结合使用,可以清晰地追踪每个版本的更改,这对于问题追踪和解决非常重要。
监控和日志
CI/CD流程也可以集成软件性能监控和日志收集,以便在软件上线后进行问题定位和性能优化。
下面我们就在 Flutter 项目一步一步的使用 Github Action 进行持续集成和持续部署吧
1. 新建或者打开你的 Flutter 项目
2. 在 Flutter 配置 Github Action
项目的根目录中设置一个新的目录和文件 .github/workflows/ci_cd.yml
xxx.yml
是github action 工作流的配置文件.我们可以在配置文件里面设置触发条件, 打包方式,运行环境等以及相关的工作流信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
name: CI/CD with Flutter
on: push: branches: [ main ] pull_request: branches: [ main ]
tags: - 'v*'
jobs: build_and_test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2
- name: Setup Flutter uses: subosito/flutter-action@v1 with: flutter-version: '2.2.3'
- name: Install dependencies run: flutter pub get
- name: Run tests run: flutter test
- name: Build APK run: flutter build apk
- name: Archive production artifacts uses: actions/upload-artifact@v2 with: name: release-apk path: build/app/outputs/flutter-apk/app-release.apk build_ios: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v2
- name: Setup Flutter uses: subosito/flutter-action@v1 with: flutter-version: '2.2.3'
- name: Install dependencies run: flutter pub get
- name: Build iOS run: flutter build ios --release --no-codesign
- name: Archive iOS uses: actions/upload-artifact@v2 with: name: release-ios path: build/ios/iphoneos/Runner.app deploy: needs: build_and_test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2
- name: Setup Flutter uses: subosito/flutter-action@v1 with: flutter-version: '2.2.3'
- name: Install dependencies run: flutter pub get
- name: Build APK run: flutter build apk
- name: Deploy to Release run: | VERSION=${GITHUB_REF#refs/tags/} echo "Deploying version $VERSION" # 这里添加你的部署代码
|
参考上面的配置文件信息, 我们工作流的主要流程如下:
- 当有新的推送(push)或者拉取请求(pull request)到主分支时,触发工作流。
- 在一个新的 Ubuntu 虚拟环境中运行步骤。
检出代码。
- 设置 Flutter 环境。
- 获取 Flutter 依赖。
- 运行 Flutter 测试。
- 构建 Flutter APK。
- 上传构建的 APK 作为工作流的工件。