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

Contributors