CI/CD в 3 раза быстрее: секреты оптимизации GitHub Actions GitHub Actions - мощный инструмент, но даже продвинутые пайплайны часто работают медленнее,…
GitHub Actions - мощный инструмент, но даже продвинутые пайплайны часто работают медленнее, чем могли бы. Потери времени = потери денег и developer experience. Вот как ускорить ваши воркфлоу без потери функциональности.
1. Используйте concurrency и cancel-in-progress
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
Это позволит отменять старые запуски одного и того же воркфлоу на той же ветке — особенно полезно при пушах в PR. Экономим минуты на каждом коммите.
2. Кешируйте всё, что можно
- name: Cache pip packages
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
То же касается node_modules, cargo, .m2, gradle — любые зависимости можно кэшировать, особенно если они скачиваются каждый раз.
3. Не бойтесь matrix + fail-fast: false
Запускайте параллельно всё, что можно: тесты на разных версиях языка, разных ОС, разных архитектурах.
strategy:
matrix:
python-version: [3.10, 3.11]
os: [ubuntu-latest, macos-latest]
fail-fast: false
4. Reusable workflows > копипаста
Выносите повторяющиеся шаги в отдельные .yml-воркфлоу и переиспользуйте их через workflow_call. Это упрощает поддержку и уменьшает ошибки.
5. Запускайте воркфлоу только при нужных событиях
on:
push:
branches: [main]
paths:
- 'src/**'
- '.github/workflows/**'
Зачем триггерить CI, если изменился только README?
Оптимизация CI/CD - это не про «поиграться с YAML». Это способ сэкономить время команды, ускорить релизы и избежать выгорания из-за бесконечного ожидания. Чем быстрее обратная связь - тем лучше продукт.
#devops #девопс
Подпишись 👉 @i_DevOps