Назад к блогу
Tutorial2 мин чтения

CI/CD для FiveM с GitHub Actions: автоматизация деплоев

Настройте CI/CD пайплайны для FiveM ресурсов с помощью GitHub Actions. Линтинг, тесты, сборка артефактов и автоматический деплой на сервер без простоя.

Agency Scripts

Основатель и ведущий разработчик Agency Scripts

Зачем CI/CD для разработки FiveM?

Непрерывная интеграция и непрерывное развертывание могут показаться излишними для скриптов FiveM, но по мере роста проектов и расширения команды автоматизированные рабочие процессы становятся незаменимыми. CI/CD обнаруживает синтаксические ошибки до их попадания на сервер, обеспечивает стандарты качества кода для всех участников, автоматизирует повышение версий и генерацию changelog, а также стабильно собирает релизы. GitHub Actions предоставляет бесплатный CI/CD для публичных репозиториев и щедрый бесплатный лимит минут для приватных, что делает его идеальной платформой для разработчиков FiveM.

Настройка Lua Linting

Начните ваш CI pipeline с автоматизированного линтинга с помощью Luacheck, стандартного инструмента статического анализа Lua. Создайте .github/workflows/lint.yml файл, который запускается при каждом push и pull request. Workflow должен установить Luacheck через LuaRocks, затем запустить его на ваших Lua файлах с кастомным .luacheckrc конфигурация, определяющая глобальные переменные FiveM, такие как Citizen, TriggerServerEvent и другие функции, специфичные для фреймворка. Это позволяет выявлять ссылки на неопределённые переменные, неиспользуемые локальные переменные и несоответствия в стиле до того, как код попадёт в продакшн.

Проверка сборки TypeScript

Если ваш проект FiveM использует TypeScript, добавьте этап сборки, который компилирует исходники TypeScript и проверяет отсутствие ошибок типов. Установите зависимости проекта через npm, затем запустите компилятор TypeScript в режиме проверки. Это гарантирует, что каждый pull request создаёт валидный JavaScript и ловит несоответствия типов, которые могут вызвать ошибки во время выполнения. Включите этот этап перед линтингом, чтобы проверять сгенерированный Lua или JavaScript вместе с исходниками TypeScript, обеспечивая полное покрытие потенциальных проблем.

Автоматическое управление версиями

Используйте GitHub Actions для автоматизации процесса релиза. При пуше тега, соответствующего шаблону версии, например v*.*.*", запуск рабочего процесса, который извлекает номер версии, обновляет его в вашем fxmanifest.lua , генерирует список изменений из сообщений коммитов с момента последнего тега, собирает любые скомпилированные ресурсы и создаёт релиз на GitHub с упакованным ресурсом в виде загружаемого артефакта. Это исключает ручную подготовку релизов и гарантирует, что каждый релиз будет последовательным и полным.

Автоматизированные стратегии тестирования

Хотя в FiveM отсутствует встроенный тестовый фреймворк, вы можете тестировать общие утилиты и бизнес-логику с помощью стандартных Lua инструментов тестирования, таких как Busted. Мокайте специфичные для FiveM глобальные переменные и нативные функции в тестовой среде, затем запускайте юнит-тесты для чистой логики. Для интеграционного тестирования рассмотрите возможность запуска безголового сервера FiveM в Docker-контейнере, который загружает ваш ресурс и выполняет автоматизированные сценарии с тестовым клиентом. Эти тесты позволяют рано обнаруживать регрессии и повышают уверенность в качестве релиза.

Автоматизация развертывания

Для команд, управляющих живыми серверами, расширьте ваш CI/CD пайплайн для деплоя. После успешной сборки и тестирования используйте SSH или FTP для развертывания обновлённого ресурса на тестовом сервере. Запустите smoke test, который проверит запуск ресурса без ошибок, затем с одобрением вручную продвигайте на продакшн. Храните учётные данные сервера как GitHub Secrets и ограничьте рабочие процессы деплоя защищёнными ветками. Этот процесс гарантирует, что на живой сервер попадёт только протестированный и проверенный код, снижая риск выпуска сломанных обновлений, нарушающих работу сообщества.

Готовы начать?

Возьмите скрипты в нашем магазине или заходите в Discord за поддержкой, обновлениями и анонсами.