GitLab CI/CD
Relevant source files
The following files were used as context for generating this wiki page:
Система автоматизации в данном проекте реализована через GitLab CI/CD для обеспечения непрерывного тестирования и развертывания приложения на платформу Fly.io. Пайплайн настроен на автоматическое выполнение при каждом обновлении кода в ветке main, что гарантирует стабильность выпускаемых обновлений.
Процесс деплоя тесно интегрирован с конфигурацией Fly.io и контейнеризацией через Docker, обеспечивая автоматическое применение миграций базы данных перед запуском новой версии приложения.
Обзор пайплайна
Пайплайн GitLab CI/CD разделен на два основных этапа (stages), которые выполняются последовательно:
- test: Запуск юнит-тестов для проверки бизнес-логики.
- deploy: Автоматическое развертывание в облачную инфраструктуру Fly.io.
Схема процесса непрерывной интеграции и доставки (CI/CD).
Sources: README.md:209-222, fly.toml:7-9
Этапы выполнения (Stages)
Тестирование (test)
На этом этапе выполняются все юнит-тесты проекта. Для оптимизации времени выполнения в среде CI интеграционные тесты, требующие наличия реальной базы данных, пропускаются с использованием флага -short.
Команда запуска тестов:
go test ./... -v
Sources: README.md:210-211, README.md:195-197
Деплой (deploy)
Автоматический деплой инициируется только при слиянии или пуше в ветку main. Процесс использует утилиту flyctl для взаимодействия с API Fly.io.
Секреты и переменные CI/CD
Для успешного деплоя в настройках GitLab (Settings → CI/CD → Variables) должна быть задана переменная FLY_API_TOKEN. Этот токен используется для аутентификации пайплайна в сервисе Fly.io без ручного ввода логина.
| Переменная | Описание | Источник |
|---|---|---|
FLY_API_TOKEN | Токен доступа к Fly.io | flyctl auth token |
DATABASE_URL | URL подключения к БД (используется для миграций) | Fly.io Secrets |
Sources: README.md:212-222, fly.toml:1-2
Инфраструктура и деплой
Проект использует fly.toml для описания параметров среды выполнения в Fly.io. В процессе деплоя выполняется специальная команда для обновления схемы базы данных.
Автоматические миграции
Перед запуском новой версии приложения выполняется команда release_command, которая запускает инструмент миграции migrate.
[deploy]
release_command = "/bin/sh -c '/app/migrate -path /app/migrations -database \"$DATABASE_URL\" up'"
Конфигурация ресурсов
Приложение развертывается в регионе ams (Амстердам) с использованием минимальных вычислительных ресурсов.
| Параметр | Значение | Файл |
|---|---|---|
| Регион | ams | fly.toml:2 |
| CPU | shared-cpu-1x | fly.toml:19 |
| Memory | 256mb | fly.toml:20 |
| Порт | 8080 | fly.toml:12 |
Sources: fly.toml:1-20, docker-compose.yml:52-55
Взаимодействие компонентов при деплое
Во время деплоя пайплайн собирает Docker-образ и пушит его в реестр. Fly.io управляет жизненным циклом машин (VM), обеспечивая автоматический запуск и остановку в зависимости от трафика.
Последовательность действий при автоматическом развертывании.
Sources: README.md:218-222, fly.toml:7-15, internal/core/config/config.go:37
Локальное управление деплоем
Помимо автоматизированного CI/CD, разработчики могут управлять процессом вручную через flyctl. Основные команды включают:
flyctl auth login: Авторизация в системе.flyctl secrets set ...: Настройка переменных окружения (JWT секреты, доступы к БД/Redis).flyctl deploy: Ручной запуск процесса деплоя, аналогичный тому, что делает GitLab CI.
Sources: README.md:199-207
Данная система CI/CD минимизирует ручное вмешательство и риск человеческой ошибки при обновлении музыкального сервиса, обеспечивая консистентность между кодом в репозитории и запущенным приложением.