Bitbucket, Docker и tclssg

СВК
Published

С недавних пор этот сайт генерится из markdown-шаблонов в полностью статическое содержимое (html-файлы). Делается это при помощи tcl-ssg https://github.com/tclssg/tclssg. И вот решил я на примере моего сайта показать механизм непрерывной интеграции и доставки (да, то самое CI/CD).

Т.е. генерировать html и "выкатывать" результат на сайт будем в автоматическом режиме при помощи docker и bitbucket pipelines.

Код сайта (md-файлы) "лежит" в каталоге input, т.е. структура каталогов с кодом выглядит так:

../
input/
    pages/
    static/
    templates/
    website.conf
bitbucket-pipelines.yml
README.md

pages - это и есть содержимое сайта в формате markdown static - это каталон с неизменяемыми файлами (картинки, архивы, и т.д.) templates - шаблоны website.conf - настройки для генератора (заголовок, адрес, описание, команды для деплоя, и т.д.)

У tcl-ssg богатые возможности (предварительно советую ознакомиться с документацией), но для нас сейчас важны пара команд:

ssg.tcl build input output
ssg.tcl deploy-ftp input output

Соответсвенно, сборка проекта и его "раскатывание" по ftp. Tcl-ssg на вход принимает управляющую команду (build, deploy-ftp, и т.д.) и имена каталогов.

Для ускорения сборки при изменениях в репозитории сайта (чтобы не обновлять и не ставить пакеты каждый раз) я сделал свой образ и разместил его в реестре докерхаба. Ниже приведен Dockerfile:

FROM debian:buster-slim
RUN apt-get update \
    && apt-get install -y tcl libtcl tcllib  libsqlite3-tcl git

WORKDIR /home/builder

RUN git clone https://github.com/tclssg/tclssg.git

Т.е. образ будем делать на основе стандартного Debian, доустановив туда требуемые пакеты. Tclssg берем из репозитория на гитхабе.

Далее в bitbucket для нашего репозитория настраиваем pipeline. Делается это просто созданием файла bitbucket-pipelines.yml в корне репозитория:

image: svk28/tclssg:latest

pipelines:
  default:
    - step:
        script:
          - mkdir output
          - /home/builder/tclssg-master/ssg.tcl build input output
          - /home/builder/tclssg-master/ssg.tcl deploy-ftp input output

На этом все настройки закончены и теперь при внесении изменений в репозитарий сайт будет автоматически обновляться.