在 Debian 上配置 Flutter 持续集成
一 方案总览
二 方案一 GitHub Actions 托管 CI
name: Flutter CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true
- name: Install dependencies
run: flutter pub get
- name: Analyze
run: flutter analyze --no-fatal-infos
- name: Run unit/widget tests
run: flutter test --coverage
- name: Build APK
run: flutter build apk --release
- name: Build App Bundle
run: flutter build appbundle --release
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
三 方案二 GitLab CI/CD 自托管 Runner
sudo apt update
sudo apt install -y gitlab-runner
sudo gitlab-runner register
# 按提示填写:GitLab 实例地址、项目注册令牌、Runner 描述、标签(如 flutter)、执行器(shell/docker)
sudo gitlab-runner start
image: cirrusci/flutter:stable
stages:
- build
- test
variables:
FLUTTER_VERSION: "stable"
before_script:
- flutter doctor -v
build:
stage: build
script:
- flutter pub get
- flutter build apk --release
- flutter build appbundle --release
artifacts:
paths:
- build/app/outputs/flutter-apk/app-release.apk
- build/app/outputs/bundle/release/app-release.aab
expire_in: 30 days
test:
stage: test
script:
- flutter test --coverage
coverage: '/lines......: \d+\.\d+%/'
四 方案三 Jenkins 自托管 CI
sudo apt update
sudo apt install -y openjdk-11-jdk
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install -y jenkins
sudo systemctl enable --now jenkins
pipeline {
agent any
environment {
FLUTTER_HOME = '/opt/flutter'
PATH = "${env.FLUTTER_HOME}/bin:${env.PATH}"
}
stages {
stage('Checkout') {
steps { git url: 'https://github.com/your/repo.git', branch: 'main' }
}
stage('Setup Flutter') {
steps {
sh 'flutter doctor -v'
sh 'flutter pub get'
}
}
stage('Test') {
steps { sh 'flutter test --coverage' }
post { always { junit '**/test/**/TEST-*.xml' } }
}
stage('Build') {
steps {
sh 'flutter build apk --release'
sh 'flutter build appbundle --release'
}
}
}
post {
always { cleanWs() }
}
}
五 关键注意事项与扩展