Публикация docker образа в self-hosted Gitea registry с помощью Gitea Act Runner
Предварительно на сервере должна быть установлена Gitea c помощью docker compose. Актуально для версии Gitea >= 1.21.8
Документация по установке. Готовое решение с Gitea от Beget.
Токен для раннера
Токен будем создавать на глобальном уровне. Переходим на страницу администратора <your_gitea.com>/admin/actions/runners
Копируем токен в .env файл со всеми переменными для Gitea. Название для переменной устанавливаем GITEA_RUNNER_REGISTRATION_TOKEN
Docker compose файл
Добавляем новый сервис с раннером:
gitea-runner-1:
container_name: gitea-runner-1
restart: always
depends_on:
- server
image: gitea/act_runner:latest
environment:
- GITEA_RUNNER_REGISTRATION_TOKEN
- GITEA_INSTANCE_URL=${GITEA__server__ROOT_URL}
- GITEA_RUNNER_NAME=runner1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./runner-1-data:/data
networks:
- giteaСкачиваем образ и запускаем docker compose:
docker compose pull
docker compose up -d
В админке Gitea должен отображаться созданный раннер:
Подготовка репозитория
Создаём новый репозиторий и добавляем в его настройках секреты:
REGISTRY— домен с self-hosted Gitea (<your_gitea.com>)TOKEN— сгенерированный токен в админке Gitea (<your_gitea.com>/user/settings/applications)
Gitea Action конфиг
Используются готовые Github Actions. Данный конфиг будет актуален и для Github (нужно только заменить переменные c
${{ gitea.[variable] }}на${{ github.[variable] }}).
- В корне проекта создаём папку
.giteaи в ней папкуworkflows, в которой будет находиться файл-конфигурацияdeploy.yml:
name: Create and publish a Docker image 🚀
on:
push:
branches:
# Запускает workflow при пуше в ветку master
- master
env:
# URL контейнерного реестра из секретов
REGISTRY: ${{ secrets.REGISTRY }}
# Имя образа (название репозитория в Gitea)
IMAGE_NAME: ${{ gitea.repository }}
jobs:
build-and-push-image:
# Использует последний доступный образ Ubuntu для выполнения
runs-on: ubuntu-latest
steps:
-
# Шаг для получения кода из репозитория
name: Checkout repository
uses: actions/checkout@v4
-
# Шаг для входа в контейнерный реестр
name: Log in to the Container registry
uses: docker/login-action@v3
with:
# Регистрация контейнерного реестра
registry: ${{ env.REGISTRY }}
# Имя пользователя (автор пуша)
username: ${{ gitea.actor }}
# Токен для доступа к реестру из секретов
password: ${{ secrets.TOKEN }}
-
# Шаг для извлечения метаданных (тегов, меток) образа
name: Extract metadata (tags, labels) for
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# Шаг для сборки и отправки Docker-изображения
- name: Build and push Docker image
id: push
uses: docker/build-push-action@v6
with:
# Контекст сборки (текущая директория)
context: .
# Указывает на необходимость отправки образа в реестр
push: true
# Теги для образа, извлеченные на предыдущем шаге
tags: ${{ steps.meta.outputs.tags }}
# Метки для образа, извлеченные на предыдущем шаге
labels: ${{ steps.meta.outputs.labels }}- Добавляем в корень проекта простой
Dockerfileдля теста - Делаем коммит и пушим в мастер
Посмотреть информацию об образе можно здесь: <your_gitea.com>/<your_user>/-/packages
Ошибка 413 Request Entity Too Large
Если во время шага Build and push Docker image в Gitea Action возникла ошибка 413 Request Entity Too Large, то нужно проверить конфиг Nginx. Размер максимально допустимого файла должен быть больше, чем передаваемый docker образ.
- Перейти в
/etc/nginx/nginx.conf - Установить параметр
client_max_body_size <размер>M; - Проверить конфигурацию
sudo nginx -t - Перезагрузить сервер
sudo systemctl restart nginx