Иногда GitHub Actions начинает "плыть": воркфлоу, который вчера собирался за 5 минут, сегодня крутится 15+. Это не баг, а сигнал — пора оптимизировать пайплайн.
Вот подборка проверенных техник, чтобы ускорить и удешевить GitHub Actions без потери функциональности:
🔹 1. Используй
actions/cache грамотно Кэширование зависимостей (
node_modules, .m2, vendor, pip) — простой способ ускорить билд на 30–70%. Пример для
npm:
- uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-npm-
🔹 2. Разделяй и властвуй: job matrix
Параллельный запуск на разных версиях языка или ОС:
strategy:
matrix:
node: [16, 18]
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
🔹 3. Минимизируй
checkout и ненужные шаги Не всегда нужно тянуть весь git-репозиторий. Добавь:
- uses: actions/checkout@v4
with:
fetch-depth: 1
🔹 4. Self-hosted runners — когда билд тяжелый
Они быстрее, могут иметь предустановленные зависимости, и ты не платишь за минуты. Особенно актуально для Java и .NET проектов.
🔹 5. Используй
workflow_dispatch для ручных прогонов Иногда удобно запускать воркфлоу вручную — например, для релизов или прогонов e2e.
on:
workflow_dispatch:
🔹 6. Логируй аккуратно — логи тоже грузят
Слишком подробные логи замедляют UI и усложняют дебаг. Используй
::group:: и ::endgroup:: для логических блоков.🔹 7. Закладывай timeouts
Иногда job висит из-за одного зависшего шага. Укажи timeout, особенно для e2e или deploy-джобов:
jobs:
build:
timeout-minutes: 15
Вывод:
GitHub Actions — мощный инструмент, но требует тонкой настройки. Оптимизация кэша, параллелизм, сокращение шагов и self-hosted runners могут сэкономить часы CI и сотни долларов на GitHub billing.
#devops #девопс
Подпишись 👉@i_DevOps