[DevOps] GitLab-CI — делаем себе просто

Привет, %username%! Я решил вернуться к генераторам статических сайтов. На просторах данного блога я уже писал о переезде с Wordpress на Hugo. В сентябре я решил дать Wordpress'у второй шанс, но увы и ах.

Короче я решил основательно упороться, придумать некоторые костыли, приправить их велосипедами и сделал следующую схему:

  1. Установил себе локально Hugo;
  2. Завел на GitLab репозиторий с Markdown файлами статей своего бложика (включая и эту);
  3. Подключил к репе CI;

Идеологически получилось следующее. Создается директория для будущей стати, в которую кладется заготовленный шаблонный файлик с именем index.md. После чего файлик сразу открывается в моем редакторе для Markdown - Mark Text. Делается это вот таким скриптиком:

#!/usr/bin/env bash 
set -e

Его я положил в отдельную директорию, которая добавлена в $PATH, а запускается это вот так:

hugo-new.sh "my-new-post-in-blog"

Строка my-new-post-in-blog сразу считается URL'ом для данного поста.

В настройках репозитория добавлены переменные:

  1. SSH_PRIVATE_KEY - приватный ключ для доступа по ssh/rsync/scp;
  2. SSH_USER - пользователь под которым подключаемся;
  3. SSH_HOST - хост куда подключаемся;
  4. REMOTE_PATH - куда на удаленном хосте кладем файлики;

Важно: добавлять приватный ключик можно как угодно, но кмк правильнее его добавлять как Masked переменную. Тут есть нюанс: после генерации нового ключа, его необходимо перевести в base64, т.к. именно такой формат может быть Masked. Сделать это можно следующим способом:

cat .ssh/gitlabci | base64 -w0 ; echo

Соответственно обратная “расшифровка” ключа у нас происходит уже внутри контейнера при сборке.

Так же я добавил Dockerfile, который, по сути, нужен только для генерации статики и отправки изменений на хостинг. Его содержимое довольно простое:

FROM ubuntu:20.04
LABEL maintainer="mail@jtprog.ru"
LABEL version="1.0"

Я запускаю сборку image на базе данного файла и совершенно не сохраняю его — он мне не нужен.

Для сборки подключается .gitlab-ci.yml с довольно простым содержимым:

image: docker:19.03.12

А дальше по пушу в ветку master у меня автоматически запускается все вышеописанное, а примерно через 1.5-2 минуты статья оказывается опубликованной.

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

На это всё! Если есть замечания — велком в чат!

Originally published at https://jtprog.ru on November 5, 2020.

Written by

#devops #linux #gitops #jtprog #jtprogru

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store