Автоматическое развёртывание блога на Hugo с помощью Gitea и Drone

Из цикла: Блог на Hugo

Сейчас я расскажу каким образом мои публикации в блоге автоматически публикуются одной лишь git push командой.

Hugo это генератор, который из текстовых файлов собирает статический сайт. Так как всё есть текст, для хранения данных отлично подходит система управления версиями – Git.

А с помощью хуков, мы можем инициировать любые действия после манипуляций с исходным кодом. В данном случае, при команде git push все изменения отправляются на мой личный хостинг кода, где запускается веб хук push. Веб хук даёт команду DroneIO собирать сайт.

Gitea

На своём сервере я поднял систему хостинга кода Gitea. Gitea – это легковесный свободный и открытый Git сервис.

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

Drone

Drone – свободная система непрерывной интеграции изменений. Drone прекрасно работает с Gitea, легко настраивается и не требует много ресурсов.

Для работы Drone в корне репозитория нужно создать файл инструкций .drone.yml. В документации подробно расписаны возможности системы.

Моя конфигурация для разворачивания блога на хостинге:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
kind: pipeline
type: docker
name: default
platform:
    os: linux
    arch: amd64
steps:
    - name: submodules
      image: alpine/git
      commands:
      - git submodule update --init --recursive

    - name: building
      image: alpine
      environment:
          LANGUAGE: en_US.UTF-8
          LC_ALL: en_US.UTF-8
          KEY_FILE: id_ecdsa
          KEY:
              from_secret: rsync_key
      commands:
          - mkdir ~/.ssh/
          - echo "$KEY" > ~/.ssh/$KEY_FILE
          - chmod 0600 ~/.ssh/$KEY_FILE
          - echo Host <Host IP> >> ~/.ssh/config
          - echo Hostname <Host IP> >> ~/.ssh/config
          - echo StrictHostKeyChecking no >> ~/.ssh/config
          - echo Port <Host Port> >> ~/.ssh/config
          - chmod 0700 ~/.ssh/config
          - apk add --no-cache hugo npm rsync openssh
          - npm install
          - hugo -b https://<Site Base URL>/ -d ./public/ --minify
          - rsync -P -rvzc --include tags --cvs-exclude --delete public/ <Host User>@<Host IP>:<WebServer Directory>

    - name: send telegram notification
      image: appleboy/drone-telegram
      settings:
          token:
              from_secret: telegram_token
          to: 
              from_secret: telegram_room_id
      when:
          status:
              - success
              - failure
trigger:
    branch:
        - master

volumes:
    - name: docker
      host: 
          path: /var/run/docker.sock

Имеется всего один докер конвейер на базе alpine.

Цикл: Блог на Hugo

  1. Реализация «Rich CSS Tooltip» в Hugo
  2. Автоматическое развёртывание блога на Hugo с помощью Gitea и Drone