Эта статья — часть серии материалов на блоге SelfOps, посвящённой самостоятельному разворачиванию и администрированию open-source сервисов. Здесь мы глубоко погружаемся в тему Gitea Actions — встроенного механизма CI/CD в Gitea, который позволяет автоматизировать сборку, тестирование и развёртывание приложений прямо в вашем self-hosted Git-сервере.
Введение
Gitea — это легковесный, open-source Git-сервер с открытым кодом, разработанный с акцентом на простоту, производительность и возможность самостоятельного размещения (self-hosting). С выходом версии 1.20, выпущенной в апреле 2024 года, Gitea внедрил встроенную систему CI/CD, получившую название Gitea Actions.
Эта система вдохновлена GitHub Actions, но адаптирована под архитектуру Gitea и предназначена для работы в условиях ограниченных ресурсов — идеально для self-hosted окружений.
NOTE
Gitea Actions — это нативная реализация CI/CD, не требующая внешних зависимостей вроде GitLab Runner или внешних сервисов. Она работает из коробки после включения в конфигурации.
🔧 Что такое Gitea Actions?
Gitea Actions — это встроенная система непрерывной интеграции и доставки (CI/CD), позволяющая автоматизировать процессы сборки, тестирования, линтинга, упаковки и развёртывания кода на основе событий в репозитории (например, push, pull_request, tag и др.).
Она использует YAML-описания в файле .gitea/workflows/*.yml (аналог .github/workflows в GitHub), что делает её знакомой для пользователей GitHub Actions.
Основные возможности
Поддержка Docker-контейнеров как среды выполнения.
Запуск параллельных заданий и зависимых этапов.
Работа с секретами (Environment Secrets).
Поддержка матричных сборок (matrix builds).
Кэширование зависимостей.
Автоматическое выполнение при событиях: push, pull_request, release, schedule и других.
Совместимость с стандартными шагами GitHub Actions (в большинстве случаев).
📦 Архитектура Gitea Actions
Gitea Actions построена на следующих компонентах:
Компонент
Описание
Gitea Server
Основной сервер, обрабатывающий события и планирующий выполнение workflow.
Runner
Встроенное или внешнее приложение, которое извлекает и выполняет задания. Начиная с 1.20, Gitea включает встроенный runner.
Workflow файлы
YAML-файлы в .gitea/workflows/, определяющие процессы.
Docker Engine
Требуется для изоляции и выполнения шагов в контейнерах.
WARNING
Для работы Gitea Actions обязательно наличие Docker на хосте, где запущен Gitea (или на удалённом runner’е). Без Docker — Actions не работают.
⚙️ Требования и настройка
Предварительные условия
Gitea версии 1.20 или выше.
Установленный Docker (или Docker-compatible runtime, например, Podman с docker-совместимостью).
Административный доступ к Gitea.
Включенный режим CI/CD в конфигурации.
Включение Gitea Actions
Отредактируйте файл конфигурации Gitea (app.ini):
[actions]ENABLED = trueMANAGED_ACTIONS = true
IMPORTANT
После изменения app.ini перезапустите Gitea:
systemctl restart gitea
Встроенный Runner
Начиная с Gitea 1.20, встроенный runner включён по умолчанию. Он автоматически регистрируется как self-hosted runner и доступен для всех репозиториев.
Проверить статус runner’а можно в интерфейсе:
Настройки репозитория → Actions → Runners
TIP
Встроенный runner — это часть процесса Gitea, он использует Docker для запуска заданий. Убедитесь, что пользователь, от которого запущен Gitea, имеет доступ к Docker (docker group).
📄 Структура Workflow
Файлы workflow размещаются в директории .gitea/workflows/ в корне репозитория.
Пример базового файла .gitea/workflows/ci.yml:
name: CI Pipelineon: push: branches: - main pull_request: branches: - mainjobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.22' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
Ключевые элементы
Поле
Описание
name
Название workflow
on
Триггеры (события) запуска
jobs
Список заданий
runs-on
Тип runner’а (поддерживается ubuntu-latest, self-hosted и др.)
steps
Последовательность действий
uses
Подключение action’а (из репозитория)
run
Выполнение команды в shell
🧪 Поддерживаемые события (triggers)
Gitea Actions поддерживает широкий спектр событий:
on: push: branches: [ main ] tags: [ 'v*' ] pull_request: branches: [ main ] release: types: [ published ] schedule: - cron: '0 2 * * 1' # Каждый понедельник в 2:00 workflow_dispatch: # Ручной запуск
Кэширование работает через actions/cache, который поддерживается в Gitea Actions.
🔐 Управление секретами
Секреты можно задавать на уровне:
Репозитория (Settings → Secrets and Variables → Secrets)
Организации
Системы (глобальные, для администраторов)
Используются в workflow через secrets.SECRET_NAME.
Пример:
env: DATABASE_URL: ${{ secrets.DATABASE_URL }}
WARNING
Секреты никогда не отображаются в логах. Gitea автоматически маскирует их.
🧩 Поддержка сторонних Actions
Gitea Actions поддерживает большинство GitHub Actions из actions/*, поскольку использует тот же формат.
Примеры совместимых actions:
actions/checkout@v4
actions/setup-go@v4
docker/login-action@v3
appleboy/ssh-action@v1
CAUTION
Не все действия будут работать. Некоторые зависят от GitHub-специфичных переменных окружения. Всегда тестируйте.
📊 Мониторинг и логи
После запуска workflow вы можете:
Просматривать ход выполнения в интерфейсе Gitea: Actions вкладка репозитория.
Читать логи в реальном времени.
Повторно запускать упавшие задания.
Просматривать артефакты (если сохранены).
🛡️ Безопасность
Рекомендации:
Используйте минимальные привилегии для секретов.
Не запускайте Actions от имени root.
Обновляйте Gitea до последней версии.
Ограничьте использование workflow_dispatch в публичных репозиториях.
DANGER
Запуск произвольного кода через Actions может быть опасен. В публичных репозиториях рассмотрите отключение автоматического запуска для PR от внешних форков.
Проверьте права пользователя Gitea на доступ к Docker.
Проблема: “Failed to start job: cannot connect to Docker daemon”
Добавьте пользователя Gitea в группу docker:
usermod -aG docker gitea
Перезапустите Gitea.
Проблема: Секреты не подставляются
Убедитесь, что секреты добавлены в нужный уровень (репозиторий/организация).
Проверьте синтаксис: secrets.MY_SECRET.
✅ Заключение
Gitea Actions — мощный инструмент для построения полностью автономной CI/CD-системы в рамках self-hosted Git-сервера. Он идеально вписывается в философию SelfOps и позволяет:
Полностью контролировать инфраструктуру.
Автоматизировать рутинные задачи.
Обеспечить безопасность и прозрачность процессов.
Это важный шаг вперёд для Gitea, делающий его серьёзным конкурентом GitLab CE и других self-hosted решений.
SUCCESS
Теперь вы можете создавать сложные пайплайны, автоматизировать деплой и тестирование, не выходя за пределы вашего Gitea-сервера.