Настройка 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

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

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

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

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

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

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования