Hugo за 30 секунд. Мой пайплайн на Gitea Actions
Этот сайт у меня работает на Hugo с форком темы Ezhil. Тема глобально перелопачена с помощью вайб-кодинга. Дада, ты не ослышался, я не фронтендер и ебал все эти джава скрипты. Я лишь даю ТЗ и постоянно внедряю какие-то новые фичи.
Ну а сегодня не джаваскрипт, сегодня про пайплайны. У нас же тут девопс блог, надо соответствовать техническим характеристикам.
читать первым в телеграм читать первым в макс
Ладно. Гитлаб я конечно же выкинул нахуй, оно слишком избыточно под мои пет-проекты и задачи. Идеально вписался проект Gitea, есть еще Forgejo, возможно в будущем перееду на него. Но пока Gitea хватает с головой, тем более всё это дело разворачивается на свой хостинг. И работает максимально быстро на скудных параметрах сервера.
Готовый пайплайн
name: Build and Deploy Hugo
on:
push:
branches:
- main
jobs:
build:
runs-on: zelda
container:
image: ghcr.io/gohugoio/hugo:latest
options: --user root
steps:
- name: Install deps
run: apk add --no-cache git rsync openssh-client
- name: Checkout repository
uses: actions/checkout@v3
- name: Build site
run: hugo --minify
- name: Deploy to Server
uses: https://gitea.com/aquelle1/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: "public/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
Тут всё просто, есть раннер под тэгом zelda, который запускает все нужные команды.
Раннер запускается через docker compose и интегрирован в стек с Gitea:
runner:
image: gitea/act_runner:nightly
environment:
GITEA_INSTANCE_URL: "https://git.linuxfactory.ru"
GITEA_RUNNER_REGISTRATION_TOKEN: "iFWDjVju8Tx1U0Wzk..."
GITEA_RUNNER_NAME: "zelda"
GITEA_RUNNER_LABELS: "zelda"
volumes:
- ./runner-data:/data
- /var/run/docker.sock:/var/run/docker.sock
restart: always
Секция с раннерами:

Переменные вроде ${{ secrets.REMOTE_USER }} забиты в самом Gitea и автоматически читаются.

Да, REMOTE_HOST и REMOTE_TARGET можно сюда не добавлять, а вынести в раздел Переменные, но исторически так сложилось. Работает — не трогай.
Сборка проекта на Hugo занимает 26-30 секунд.

Да, есть куда стремиться, основное время на себя забирает Checkout.

Репка жирная, видосы надо залить в peertube и тогда оно знатно ускорится. Ну либо можно забацать костыль, но чёт даже думать в сторону костылей не хочу. Пока деплой в 30 секунд меня полностью устраивает.
Как это работает?
Банально, комитим в репку main, срабатывает триггер, стартует раннер и запускает инструкции из пайплайны, который лежит в .gitea/workflows/deploy.yml.
Инструкции кстати адаптированы к Github Actions, можно легко мигрировать. НО, не рекомендую, потому что придерживаюсь движения Self-Hosted и не хочу делиться своими данными с пидорскими корпорациями, которые сливают данные иностранным «малдерам».
Забирай себе в копилку, глядишь прикрутишь однажды и начнешь делиться своими сокровенными знаниями с другими. На фоне блокировок и т.п. сайты и форумы сейчас активно возвращаются.
