Автоматическое развёртывание с GitHub Actions: настройка CI/CD Pipeline
Создание CI/CD-пайплайнов с GitHub Actions: сборка и публикация Docker, развёртывание на сервере по SSH, автоматизация тестов, управление секретами и оптимизация рабочих процессов.
Автоматическое развёртывание с GitHub Actions: настройка CI/CD Pipeline
GitHub Actions — мощная CI/CD-платформа, которая автоматически тестирует, собирает и развёртывает изменения кода на сервере. В этом руководстве мы создадим готовый к production пайплайн с нуля.
Что такое GitHub Actions?
GitHub Actions — платформа автоматизации, интегрированная в репозитории GitHub:
Реагирует на события: push, PR, расписание
Запускает параллельные и последовательные рабочие процессы
2 000 минут/месяц бесплатно (неограниченно для публичных репозиториев)
Расширяется тысячами готовых actions
Файлы рабочих процессов GitHub Actions хранятся в формате YAML в директории .github/workflows/.
deploy:needs:dockerruns-on:ubuntu-latestenvironment:productionsteps:-name:РазвёртываниепоSSHuses:appleboy/ssh-action@v1.0.3with:host:${{secrets.SERVER_HOST}}username:${{secrets.SERVER_USER}}key:${{secrets.SSH_PRIVATE_KEY}}port:${{secrets.SERVER_PORT}}script:|
cd /root/myapp
git pull origin main
docker compose pull
docker compose up -d --remove-orphans
docker image prune -f
echo "Развёртывание завершено: $(date)"
Развёртывание с Docker Compose
hljs yaml
-name:РазвёртываниеDockerComposeuses:appleboy/ssh-action@v1.0.3with:host:${{secrets.SERVER_HOST}}username:${{secrets.SERVER_USER}}key:${{secrets.SSH_PRIVATE_KEY}}script:|
# Получить новый образ
docker pull ghcr.io/${{ github.repository }}:latest
# Развёртывание без простояdockercompose-f/root/app/docker-compose.ymlup-d\--no-deps\--build\--remove-orphans# Очистить старые образыdockerimageprune-af--filter"until=24h"# Проверка работоспособностиsleep10curl-fhttp://localhost:3000/health||exit1
steps:-name:Конфигурацияприложенияenv:DATABASE_URL:${{secrets.DATABASE_URL}}JWT_SECRET:${{secrets.JWT_SECRET}}API_KEY:${{secrets.API_KEY}}run:|
echo "Конфигурация загружена"
# Секреты никогда не выводятся в логи, автоматически маскируются
jobs:deploy-production:runs-on:ubuntu-latestenvironment:name:productionurl:https://example.comsteps:-name:Развёртываниевproductionrun:echo"Развёртывание в production"
В GitHub в разделе Settings > Environments > production:
Настроив полностью автоматизированный CI/CD-пайплайн с GitHub Actions, вы сможете повысить качество кода, сократить ошибки при развёртывании и ускорить процесс разработки. Управление секретами, оптимизация кэша и правила защиты окружений обеспечат вам пайплайн production-уровня.
Часто задаваемые вопросы
Является ли GitHub Actions бесплатным?
Для публичных репозиториев — полностью бесплатно и без ограничений. Приватные репозитории получают 2 000 бесплатных минут в месяц. При превышении лимита на плане GitHub Free рабочие процессы приостанавливаются. Планы GitHub Pro и Team включают больше минут.
Как создать SSH-приватный ключ и добавить его в GitHub?
Создайте пару ключей на локальной машине командой 'ssh-keygen -t ed25519 -C "github-actions"'. Добавьте публичный ключ (~/.ssh/id_ed25519.pub) в ~/.ssh/authorized_keys на сервере. Сохраните приватный ключ (~/.ssh/id_ed25519) в репозитории GitHub в разделе Settings > Secrets как SSH_PRIVATE_KEY.
Как работает зависимость заданий с needs?
'needs: test' означает, что это задание не запустится, пока задание 'test' не завершится успешно. Используйте 'needs: [test, build]' для нескольких зависимостей. Если задание завершается с ошибкой, зависимые задания автоматически отменяются.
Можно ли запускать рабочий процесс только при изменении определённых файлов?
Да, используйте 'on.push.paths' для отслеживания конкретных файлов или директорий. Например, 'paths: ["src/**", "package.json"]' запускает рабочий процесс только при изменении этих файлов. Используйте 'paths-ignore' для исключения определённых файлов.
Почему важен кэш сборки Docker?
Кэш сборки Docker предотвращает пересборку неизменённых слоёв. 'cache-from: type=gha' использует кэш GitHub Actions. Это может сократить время сборки на 50-80%. Особенно большой эффект даёт для шагов установки зависимостей (npm install, pip install).
Что делают правила защиты окружений?
Они добавляют механизм одобрения для критических окружений, таких как production. С 'Required reviewers' развёртывание невозможно без одобрения определённых людей. 'Wait timer' устанавливает время ожидания перед развёртыванием. Это предотвращает случайные развёртывания в production.
Определение и управление многоконтейнерными приложениями с Docker Compose: зависимости сервисов, переменные окружения, проверки работоспособности, масштабирование и развёртывание в production. Полное руководство.
Установка Ansible, файл инвентаря, написание playbook, структура ролей, переменные, зашифрованный vault, ad-hoc команды и автоматизация конфигурации серверов. Пошаговое руководство.