Настройка CI в Gitea (Action Runner)

Оцените статью

В Gitea наконец-то завезли собственный Runner и можно выбросить на свалку истории так мною любимые Jenkins и Concourse. Принцип работы аналогичный Runner для Gitlab и так-же используется Docker для операций сборки и деплоя.

Action Runner — это агент, который запускает задачи в системе CI/CD на платформе Gitea. Он работает как отдельное приложение и выполняет скрипты или действия, описанные в файлах YAML, которые хранятся вместе с исходным кодом проекта.

Как устроен Action Runner?

  1. Регистрация: После установки Action Runner регистрируется на сервере Gitea через API, предоставляя токен регистрации, полученный при создании агента на веб-интерфейсе Gitea.
  2. Пул задач: Регистрируясь, Action Runner начинает слушать пул заданий от сервера Gitea. Когда появляется новая задача (например, после отправки кода в репозиторий), она отправляется на зарегистрированный Action Runner.
  3. Запуск задания: Получив задачу, Action Runner проверяет ее условия выполнения (триггеры). Если все соответствует условиям, начинается выполнение шагов, указанных в конфигурационном файле (gitea.yml).
  4. Контейнеризация: В зависимости от конфигурации, задание может выполняться внутри Docker-контейнера или напрямую на хост-машине.
  5. Отчетность: По завершении каждого шага информация о его выполнении (успешно или нет) передается обратно на сервер Gitea, где отображается статус выполнения.
  6. Хранение результатов: Результат выполнения задания (логи, артефакты) сохраняется либо локально, либо загружается на сервер Gitea по запросу.

Основные компоненты

  • Action Worker: Основной процесс, выполняющий логику обработки задач.
  • Docker Executor: Позволяет выполнять шаги в изолированных контейнерах Docker.
  • Shell Executor: Выполняет команды непосредственно на операционной системе хоста.
  • Artifacts Handler: Обрабатывает файлы, создаваемые во время выполнения заданий (артфакты), позволяя их сохранять и использовать позже.

Получение токена для регистрации Runner-а

Переходим в панель управления в WEB-интерфейсе Gitea.

Раздел «Действия» -> «Раннеры» и нажимаем кнопку «Создать новый раннер».

Runner registration token

Запуск Gitea Runner в Ubuntu Linux

Существует два варианта запуска Gitea Runner. Вы можете запустить Runner в виде Docker образа или в виде SystemD сервиса.

Запуск в виде Docker Compose

Для установки Docker и Docker Compose воспользуемся нашей статьей:

Создадим Docker Compose файл docker-compose.yml.

services:
  runner-1:
    image: gitea/act_runner:nightly
    restart: always
    environment:
      - CONFIG_FILE=/config.yaml
      - GITEA_INSTANCE_URL=https://git.interlan.xyz
      - GITEA_RUNNER_REGISTRATION_TOKEN=xxxTOKENxxx
    volumes:
      - ./runner-1/config.yaml:/config.yaml
      - ./runner-1/data:/data
      - ./runner-1/cache:/root/.cache
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "8088:8088"

Ранеров как вы понимаете может быть сколько угодно и в моем случае я создал его с именем runner-1, а токен естественно одинаковый для всех.

Запущеный ранер в web-интерфейсе

Запущеный ранер будет отображаться в web-интерфейсе. Файл конфигурации config.yaml в моем случае имеет следующее содержание.

log:
  level: info

runner:
  file: .runner
  capacity: 1
  timeout: 3h
  insecure: false
  fetch_timeout: 5s
  fetch_interval: 2s
  labels: ["ubuntu-latest:docker://node:16-bullseye", "ubuntu-22.04:docker://node:16-bullseye", "ubuntu-20.04:docker://node:16-bullseye", "ubuntu-18.04:docker://node:16-buster"]

cache:
  enabled: true
  dir: ""
  host: "1.2.3.4"
  port: 8088
  external_server: ""

container:
  network: ""
  privileged: false
  options:
  workdir_parent:
  valid_volumes: []
  docker_host: ""
  force_pull: false

host:
  workdir_parent:

Конфигурационные параметры Action Runner’a

Ниже приведены основные разделы и поля конфигурационного файла Action Runner’а для Gitea Actions.

1. Базовые параметры

Эти параметры определяют общую информацию о рабочем окружении и подключении к серверу Gitea.

ПараметрОписание
nameИмя action runner’а, которое будет видно в списке агентов на панели управления Gitea.
urlURL-адрес вашего экземпляра Gitea, куда отправляет запросы Action Runner. Например, «https://example.com»
tokenТокен доступа, необходимый для авторизации у сервера Gitea. Выдается при добавлении нового агента.
runner_group_idИдентификатор группы агентов, если используется группировка (опционально).
labelsМетки, используемые для выбора подходящего агента под конкретную задачу. Например, можно указать метку «docker», «linux».
work_dirРабочая директория, где будут храниться временные данные работы. По умолчанию /tmp/actions_runner_workdir.
ephemeralЛогическое значение, указывающее, должен ли runner удаляться автоматически после завершения всех назначенных ему работ. Значения: true/false.
log_levelУровень детализации ведения журнала событий. Возможные значения: «debug», «info», «warn», «error».
check_intervalИнтервал проверки новых заданий в секундах. Стандартное значение — 3 секунды. Может быть увеличено для снижения нагрузки на сервер.
max_concurrent_jobsМаксимальное количество одновременно выполняемых заданий на одном runner-е. Используется для ограничения параллельных задач.

2. Дополнительные опции Docker Engine

Если ты используешь контейнеризацию с Docker, то могут понадобиться дополнительные параметры:

ПараметрОписание
docker.enabledВключать поддержку Docker? Значения: true/false. Полезно, когда необходимо использовать контейнеры для изоляции окружения.
docker.hostАдрес сокета Docker Daemon, например, «unix:///var/run/docker.sock».
docker.network_modeРежим сети Docker. Можно задать сеть по умолчанию, например, «bridge», чтобы ограничить доступ к интернету или сетевым ресурсам.
docker.privilegedПредоставлять привилегии контейнеру? Это важно для некоторых специальных сценариев.
docker.volumesМассив томов Docker, которые монтируются внутрь контейнера. Например, [ «/home/user:/workspace»].
docker.dockerfile_pathПуть до Dockerfile, используемого для создания образа контейнера. Используется только тогда, когда необходим кастомный образ.

3. Параметры производительности и безопасности

Некоторые параметры отвечают за производительность и безопасность системы:

ПараметрОписание
timeout_minutesТаймаут ожидания перед завершением задания, если оно зависло. Например, задается в минутах.
retry_countКоличество попыток повторного выполнения задания в случае ошибки.
idle_timeout_minutesВремя простоя (в минутах), после которого idle runner отключится, если указан флаг ephemeral=true.
tls_verifyПроверять сертификат TLS при соединении с сервером Gitea? Зависит от того, настроен ли ваш экземпляр с самоподписанным сертификатом.
use_proxyИспользовать прокси-сервер для соединений с внешним миром. Обычно полезно в корпоративных сетях с ограниченным доступом в интернет.

4. Параметры логирования

Параметры для контроля уровня логирования и хранения журналов:

ПараметрОписание
log_to_fileФлаг, указывающий, записывать ли журналы в файл.
log_max_sizeМаксимальная размер файлов журнала (в мегабайтах).
log_rotationЧастота ротации файлов журнала (ежедневная, еженедельная и т.д.).
log_compressionМетод сжатия старых журналов, например gzip.

Пример минимального конфигурационного файла:

{
  "name": "MyRunner",
  "url": "http://my-gitea.example.com",
  "token": "<your_token>",
  "work_dir": "/opt/my_actions_runner",
  "labels": ["linux", "x86_64"],
  "log_level": "info"
}

Запуск в виде SystemD сервиса

Action Runner представляет собой Go-приложение и поставляется в виде бинарного файла который можно загрузить по адресу https://about.gitea.com/products/runner/.

Скачать бинарный файл Gitea Action Runner

Конфигурация сервиса /lib/systemd/system/gitea-runner.service выглядит следующим образом.

[Unit]
Description=Gitea Runner
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/opt/gitea-runner
ExecStart=/opt/gitea-runner/act_runner daemon -c /opt/gitea-runner/config.yaml
Restart=always

[Install]
WantedBy=multi-user.target

Перед запуском сервиса выполняем регистрацию, для чего перелогиниваемся в пользователя git и выполняем регистрацию.

# su git
git@srv-prod-rain-02:/opt/gitea-runner$ /opt/gitea-runner/act_runner register
INFO Registering runner, arch=amd64, os=linux, version=v0.2.13. 
WARN Runner in user-mode.                         
INFO Enter the Gitea instance URL (for example, https://gitea.com/): 
https://git.interlan.xyz/
INFO Enter the runner token:                      
xxxTOKENxxx
INFO Enter the runner name (if set empty, use hostname: srv-prod-rain-02.rain.shiskitech.ru): 
srv-prod-rain-02.rain.shiskitech.ru
INFO Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest): 
docker-runner, docker-builder, docker-any
INFO Registering runner, name=srv-prod-rain-02.rain.shiskitech.ru, instance=https://git.interlan.xyz/, labels=[docker-runner  docker-builder  docker-any]. 
DEBU Successfully pinged the Gitea instance server 
INFO Runner registered successfully.  

Выполняем тестовый запуск.

$ /opt/gitea-runner/act_runner daemon --config /opt/gitea-runner/config.yaml
INFO[2026-04-07T10:29:16+03:00] Starting runner daemon                       
INFO[2026-04-07T10:29:16+03:00] labels updated to: [docker-runner:host docker-builder:host docker-any:host] 
INFO[2026-04-07T10:29:16+03:00] runner: srv-prod-rain-02.rain.shiskitech.ru, with version: v0.2.13, with labels: [docker-runner docker-builder docker-any], declare successfully 

Настраиваем автозапуск сервиса и запускаем.

# systemctl start gitea-runner
# systemctl enable gitea-runner

Таким образом у нас получилось уже два раннера.

gitea runner запущенный в виде сервиса

Настройка сервера кэширования

Как я уже писал в статье «Оптимизация сборки Spring приложений в Gitlab/Gitlab-Runner» самый простой и эффективный способ оптимизации сборки это использование кэша и этот механизм есть в Gitea.

Аналогично сборщику из прошлого раздела запустим Action Runner в режиме кэширования.

[Unit]
Description=Gitea Runner
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/opt/gitea-cache
ExecStart=/opt/gitea-cache/act_runner cache-server -s 10.101.5.1 -p 43707
Restart=always

[Install]
WantedBy=multi-user.target

И прописываем на сборщиках в конфигурационном файле адрес сервера кэширования (запуск локального кэширования на сборщиках отключаем).

Пример простейшего Workflow

Workflows в Gitea должен быть расположен в каталоге .gitea/workflows/.

name: Gitea Actions Demo
on: [push]

jobs:
  build-and-test:
    # Must match labels defined on your runner (e.g., ubuntu-latest)
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository code
        uses: actions/checkout@v4

      - name: Run a script
        run: |
          echo "Building the project..."
          ls -la

Похожие записи

Подключение NFS-шары в качестве хранилища резервных копий ZVirt

Сегодня понедельник и продолжаем работать с проектом по запуску инфраструктуры на базе RedOS. Сегодня одним из пунктов настройка резервного копирования виртуальных машин в системе виртуализации ZVirt. Как выяснилось нам потребуется…

SOCKS5 Proxy в Ubuntu Linux за одну минуту

В прошлой статье я рассказывал как установить SOCKS5 Proxy Dante в Ubuntu Linux, но оказывется есть способ гораздо проще. Установка GOST v2 Сервис для автозапуска при старте сервиса Файл /etc/systemd/system/gost.service.…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка CI в Gitea (Action Runner)

Настройка CI в Gitea (Action Runner)

Подключение NFS-шары в качестве хранилища резервных копий ZVirt

Подключение NFS-шары в качестве хранилища резервных копий ZVirt

SOCKS5 Proxy в Ubuntu Linux за одну минуту

SOCKS5 Proxy в Ubuntu Linux за одну минуту

Быстрая установка и настройка SOCKS5-прокси Dante в Ubuntu Linux

Быстрая установка и настройка SOCKS5-прокси Dante в Ubuntu Linux

Настройка сервера печати CUPS и интеграция с FreeIPA

Настройка сервера печати CUPS и интеграция с FreeIPA

Эволюция приложения в облаке: как запустить микросервисы в Managed Kubernetes

Эволюция приложения в облаке: как запустить микросервисы в Managed Kubernetes