🔄 CI/CD — Gitea Actions для contracts-flask

Автоматическая валидация при git push. Настроено 2026-06-29.


Как это работает

Gitea Actions — встроенный CI/CD (аналог GitHub Actions), доступен с Gitea 1.19+. При каждом git push в master запускается workflow, который выполняет заданные шаги на раннере — отдельной машине, которая слушает задачи.

КомпонентГдеЧто делает
Workflow-файл.gitea/workflows/deploy.yamlОписывает шаги (steps)
Act RunnerВыделенная VMВыполняет джобы (systemd-сервис)
Giteagitea.services.ngcloud.ruОтправляет задачи раннеру

Текущий workflow

name: Deploy contracts-flask
on:
  push:
    branches: [master]

jobs:
  validate:
    runs-on: linux_amd64
    steps:
      - name: Test runner
        run: |
          echo "✅ Runner is alive!"
          python3 --version

Workflow срабатывает при каждом пуше в master. Пока делает простую проверку — в будущем можно добавить:

⚠️ Ручной редеплой managed-сервиса (Flask) — через Nubes UI. Workflow НЕ делает редеплой автоматически — только валидацию и синхронизацию VM-части.


Как это настраивалось

1. Установка act_runner на VM

# Скачать бинарник
curl -sL -o /usr/local/bin/act_runner \
  https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-linux-amd64
chmod +x /usr/local/bin/act_runner

2. Получение токена

В Gitea: Репозиторий → Settings → Actions → Runners → Create new runner

Выдаётся токен вида D0gvfu2iHfUj... — он используется для регистрации.

3. Регистрация раннера

act_runner register \
  --no-interactive \
  --instance https://gitea.services.ngcloud.ru \
  --token <TOKEN> \
  --name contracts-vm \
  --labels linux_amd64:host

linux_amd64:host — означает host-режим (без Docker). Джобы выполняются прямо на машине.

4. Генерация конфига

act_runner generate-config > /etc/act_runner/config.yaml
# Важно: поправить labels → ["linux_amd64:host"]

5. Systemd-сервис

[Unit]
Description=Gitea Actions Runner
After=network.target

[Service]
ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml
WorkingDirectory=/etc/act_runner
Restart=always
RestartSec=10
User=runner
Environment=HOME=/home/runner

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable act_runner --now
sudo systemctl status act_runner

6. Workflow-файл

Создать .gitea/workflows/deploy.yaml в репозитории. При пуше — workflow запустится автоматически.

Важно: runs-on должен совпадать с лейблом раннера (без :host). То есть runs-on: linux_amd64.


Проверка статуса

# Логи раннера на VM
sudo journalctl -u act_runner -f

# Статус сервиса
sudo systemctl status act_runner

Результаты выполнения workflow видны в Gitea на вкладке Actions репозитория.


Полезные ссылки