Как я создал конвейер DevSecOps CI/CD для приложения Flutter

Как я создал конвейер DevSecOps CI/CD для приложения Flutter

FlutterPulse

Эта статья переведена специально для канала FlutterPulse. В этом канале вы найдёте много интересных вещей, связанных с Flutter. Не забывайте подписываться! 🚀

Введение

скриншот

Введение

По мере того, как мобильные приложения становятся более мощными, а угрозы безопасности растут, интеграция DevSecOps в жизненный цикл разработки больше не является опциональной — она необходима. В этой статье я пройдусь с вами через то, как я настроил конвейер DevSecOps CI/CD для мобильного приложения Flutter, интегрируя инструменты для безопасности, автоматизации, тестирования и развертывания.

В конце вы поймете:

- Как DevSecOps вписывается в разработку мобильных приложений

- Настройка конвейера CI/CD для Flutter

- Инструменты, которые я использовал (и DevOps, и DevSecOps)

- Практические шаги, которые вы можете выполнить

— -

Что такое DevSecOps?

DevSecOps означает Разработка, Безопасность и Эксплуатация. Это культура и подход, который интегрирует практики безопасности в процесс DevOps с самого начала, а не прикрепляет их позже.

> Вместо "безопасности смещенной влево" как модного слова, я сделал ее практической частью моего рабочего процесса Flutter.

— -

Используемый стек

| Компонент | Инструмент/Платформа |

| — — — — — — — — | — — — — — — — — — — — |

| Управление версиями | Git + GitHub |

| CI/CD Engine | GitHub Actions |

| сборка Flutter | Flutter SDK |

| тестирование | `flutter test`, `flutter analyze` |

| статический анализ | `dart_code_metrics`, `flutter_lints` |

| управление секретами | GitHub Secrets |

| безопасность мобильных приложений | MobSF (Mobile Security Framework) |

| подписание кода | Keystore + GitHub Secrets |

| развертывание | Firebase App Distribution / Play Store |

— -

📦 структура проекта

Вот как выглядит структура моего репозитория:

bash

flutter_app/

├──.github/workflows/

│ ├── dev.yml

│ └── prod.yml

├── lib/

├── test/

── android/

── ios/

── pubspec.yaml

— -

Обзор конвейера CI/CD

1. Триггер

Конвейер запускается на:

- Push в `main` (разработка)

- Запрос на вытягивание в `main` (с проверками безопасности)

- Создание тега релиза (для развертывания в производстве)

2. Этапы

Поток разработки

- Выгрузка кода

- Запуск статического анализа кода

- Запуск юнит-тестов и тестов виджетов

- Построение APK

- Запуск сканирования MobSF (необязательно в режиме разработки)

Производственный поток

- Выгрузка и настройка Flutter

- Создать подписанный APK

- Запустить статические и тесты безопасности

- Загрузить в Firebase App Distribution

- Необязательно: Отправить в Google Play (вручную или автоматически)

— -

Пошаговое руководство

Шаг 1: Настройка GitHub Actions

Файл: `.github/workflows/dev.yml`

yaml

name: Flutter DevSecOps CI

on: [push, pull_request]

jobs:

build:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v3

- name: Настройка Flutter

uses: subosito/flutter-action@v2

with:

flutter-version: .x'

- имя: Установка зависимостей

выполнить: flutter pub get

- имя: Запуск статического анализа

выполнить: flutter analyze

- имя: Запуск юнит-тестов

выполнить: flutter test

- имя: Метрики кода Dart

выполнить: |

dart pub global activate dart_code_metrics

dart pub global run dart_code_metrics:metrics lib

- имя: Построение APK

выполнить: flutter build apk

Шаг 2: Добавление сканирования безопасности (интеграция DevSecOps)

Для более глубокой безопасности мобильных устройств я интегрировал [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF):

- Построить APK с помощью `flutter build apk`

- Загрузить на локальный/хостовый сервер MobSF через API

- Автоматизировать сканирование и получать отчеты о уязвимостях

Шаг 3: Управление секретами

Использовать GitHub Secrets для:

- `KEYSTORE_PASSWORD`

- `KEY_ALIAS`

- `FIREBASE_TOKEN`

- `PLAY_STORE_JSON`

yaml

- name: Расшифровка хранилища ключей

run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/upload-keystore.jks

— -

🧪 Безопасность и проверки качества

| Инструмент | Назначение |

| — — — | — — — — -|

| `flutter analyze` | Статический анализ |

| `dart_code_metrics` | Linting + Предупреждения о сложности |

| MobSF | Сканер уязвимостей мобильных приложений |

| Обнаружение секретов | Сканирование секретов GitHub |

| Аудит зависимостей | Просмотр `pubspec.lock` для уязвимых пакетов |

— -

📤 Развертывание

Я использовал Firebase App Distribution для развертывания сборок для тестировщиков и по желанию настроил Play Store загрузку с помощью Fastlane (с ручным одобрением).

yaml

- название: Развертывание в Firebase

uses: wzieba/Firebase-Distribution-Github-Action@v1

with:

appId: ${{ secrets.FIREBASE_APP_ID }}

token: ${{ secrets.FIREBASE_TOKEN }}

groups: beta-testers

file: build/app/outputs/flutter-apk/app-release.apk

— -

Результаты и выгоды

- Интегрированная безопасность с первого дня

- Предотвращен утечка секретов через автоматизацию

- Быстрее доставка с меньшим количеством ручных шагов

- Повышение качества кода за счет обязательного линтинга

- Я мог спать лучше, зная, что у меня есть ворота безопасности

— -

Окончательные мысли

Настройка DevSecOps CI/CD конвейера в Flutter не является раетной наукой, но требует дисциплины и правильных инструментов. Это помогло мне доставлять быстрее, сохраняя безопасность в ядре моего цикла разработки мобильных приложений.

Если вы являетесь разработчиком Flutter или мобильным разработчиком, стремящимся сместить фокус на безопасность, начните с малого и постепенно эволюционируйте свой конвейер.

— -

📎 Полезные ссылки

- [Flutter GitHub Actions](https://github.com/marketplace/actions/flutter-action)

- [Dart Code Metrics](https://pub.dev/packages/dart_code_metrics)

- [MobSF GitHub](https://github.com/MobSF/Mobile-Security-Framework-MobSF)

- [Firebase App Distribution](https://firebase.google.com/products/app-distribution)

— -

Спасибо за чтение! Не забудь поделиться и оставить свои мысли в комментариях.

Report Page