Skip to content

Luca324/shri-infra-homework-2025

Repository files navigation

Домашнее задание ШРИ: Инфраструктура

Описание Workflow

Проект содержит 4 взаимосвязанных GitHub Actions workflow, которые полностью автоматизируют процесс разработки, тестирования, релизов и деплоя.

1. Release Workflow (release.yml)

Триггер: Ручной запуск через workflow_dispatch

Функциональность:

  • Запускает линт и тесты перед релизом
  • Автоматически создает ветку releases/{run_number} для изоляции релиза
  • Собирает Docker образ и пушит его в Yandex Container Registry с тегами {run_number} и {run_number}_latest
  • Создает Git тег v{run_number} для версионирования
  • Автоматически создает GitHub Issue с полной информацией о релизе:
    • Дата и автор релиза
    • Версия релиза
    • Docker образ для деплоя
    • История коммитов с предыдущего релиза
  • Автоматически обновляет CHANGELOG.md в ветке релиза с историей изменений

Особенности:

  • Использует github.run_number для уникальной нумерации релизов
  • Анализирует Git историю для определения коммитов с предыдущего релиза
  • Форматирует и структурирует информацию для удобного чтения

2. Hotfix Workflow (hotfix.yml)

Триггер: Ручной запуск через workflow_dispatch с параметром release_version

Функциональность:

  • Запускает линт и тесты на ветке релиза
  • Умное вычисление номера фикса: анализирует CHANGELOG.md для определения последнего номера фикса и автоматически инкрементирует его
  • Собирает Docker образ с тегами {version}_fix{N} и {version}_latest
  • Создает Git тег v{version}_fix{N}
  • Автоматически находит GitHub Issue соответствующего релиза и добавляет комментарий с информацией о хотфиксе:
    • Дата и автор фикса
    • Версия фикса (v{version}_fix{N})
    • Docker образ для деплоя
    • История коммитов с последнего релиза/фикса
  • Автоматически обновляет CHANGELOG.md в соответствующей секции релиза

Особенности:

  • Работает с существующими ветками релизов (releases/{version})
  • Умная логика определения базового тега для вычисления изменений
  • Интеграция с GitHub Issues API для автоматического комментирования

3. Production Workflow (production.yml)

Триггер: Ручной запуск через workflow_dispatch с параметром release_version

Функциональность:

  • Проверяет наличие Docker образа в Yandex Container Registry перед деплоем
  • Настраивает SSH соединение с продакшн сервером
  • Подключается к виртуальной машине по SSH
  • Пуллит актуальный Docker образ из registry
  • Запускает контейнер на порту 80 (маппинг на внутренний 3000)
  • Автоматически находит GitHub Issue релиза и добавляет комментарий о деплое в продакшн:
    • Дата деплоя
    • Автор деплоя

Особенности:

  • Безопасное управление SSH ключами через GitHub Secrets
  • Проверка существования образа перед деплоем предотвращает ошибки
  • Автоматическое логирование деплоя в GitHub Issues

4. Pull Request Workflow (pull_request.yml)

Триггер: Автоматический при создании Pull Request в ветку main

Функциональность:

  • Автоматически запускает линт при создании PR
  • Автоматически запускает тесты при создании PR
  • Блокирует мерж PR, если линт или тесты не проходят

Особенности:

  • Защита основной ветки от некорректного кода
  • Параллельное выполнение линта и тестов для ускорения CI

Архитектура Workflow

Все workflow тесно интегрированы между собой:

PR → [lint + test] → main
                      ↓
                  [Release] → создает Issue, ветку, Docker образ, тег, CHANGELOG
                      ↓
                  [Hotfix] → комментирует Issue, обновляет CHANGELOG, создает фикс-образ
                      ↓
                  [Production] → деплоит на сервер, комментирует Issue

Технологии

  • GitHub Actions - автоматизация CI/CD
  • Docker - контейнеризация приложения
  • Yandex Container Registry - хранение Docker образов
  • GitHub Issues API - автоматическое управление issues и комментариями
  • SSH - деплой на продакшн сервер

Секреты (GitHub Secrets)

Для работы workflow требуются следующие секреты:

  • OAUTH_TOKEN - токен для доступа к Yandex Container Registry
  • REGISTRY_ID - ID реестра в Yandex Container Registry
  • OPENSSH_PRIVATE_KEY - приватный SSH ключ для подключения к серверу
  • PUBLIC_IP - IP адрес продакшн сервера
  • GITHUB_TOKEN - автоматически предоставляется GitHub Actions для работы с Issues API

About

Домашняя работа по лекции «Инфраструктура» Школы разработки интерфейсов Яндекса. Создание сложного GitHub Actions workflow, который автоматизирует весь жизненный цикл релизов.

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages