Hugo за 30 секунд. Мой пайплайн на Gitea Actions

Этот сайт у меня работает на Hugo с форком темы Ezhil. Тема глобально перелопачена с помощью вайб-кодинга. Дада, ты не ослышался, я не фронтендер и ебал все эти джава скрипты. Я лишь даю ТЗ и постоянно внедряю какие-то новые фичи.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Кстати есть похожая тема Archie, от неё я так же многое почерпнул. Можно сказать скрестил бульдога с носорогом. Получилось прям заебись, до сих пор глаз радуется. Отдельный плюс в том, что и под мобилки оно шикарно оптимизировано. Короче если хочешь прям близкое, бери Archie, с него потом легко клепать что-то своё.

Ну а сегодня не джаваскрипт, сегодня про пайплайны. У нас же тут девопс блог, надо соответствовать техническим характеристикам.

 читать первым в телеграм    читать первым в макс

Ладно. Гитлаб я конечно же выкинул нахуй, оно слишком избыточно под мои пет-проекты и задачи. Идеально вписался проект 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 и не хочу делиться своими данными с пидорскими корпорациями, которые сливают данные иностранным «малдерам».

Забирай себе в копилку, глядишь прикрутишь однажды и начнешь делиться своими сокровенными знаниями с другими. На фоне блокировок и т.п. сайты и форумы сейчас активно возвращаются.

Комментарии