tg-me.com/eshu_coding/356
Last Update:
Гитлаб для чайников. Часть 4.
Всю информацию, необходимую для деплоя и работы сервисов, которая не является статичной/открытой я поместил в переменные (Settings => CI/CD => Variables).
Переменные подтягиваются при выполнении скрипта деплоя двумя способами:
1. Обычные переменные просто подставляются в текст скрипта синтаксисом вида ${VAR_NAME}
2. Переменные типа File можно подсунуть в файловую систему проекта во время строки синтаксисом вида
cp ${FILE_VAR_NAME} prod.envВ обычных переменных я держу пароли, адреса серверов и т.д. А в файловые сохраняю .env файлы для подтягивания переменных окружения docker-compose-ом.
При деплое используется два типа docker-compose файлов. Первый для построения образов, второй - собственно для деплоя.
В обоих файлах адрес хранилища образов и его tag (что-то типа версии) задаются через переменные окружения. Также через переменные окружения подтягиваются build args для образов, чтобы передать какую-то информацию в образ на этапе сборки (например - чтобы не хардкодить адрес бэкенда на фронте).
В docker docker-compose файлы второго типа через переменные окружения передается вся сопуствующая информация: строки подключения к базам данных, данные для подключения к брокерам сообщений, адреса других микросервисов.
В Gitlab CI/CD скриптах можно менять поведение в зависимости от ветки Гита, пока самое удобное для меня место - секция workflow в скрипте. Если ветка - dev, то подтягиваем из переменных файлы
DEV_BUILD_ENV
и DEV_DEPLOY_ENV
, а также вызываем для деплоя runner, помеченный тегом dev_deploy_runner
. И MASTER_BUILD_ENV
, MASTER_DEPLOY_ENV
, master_deploy_runner
для ветки master соответственно.После коммита прогресс выполнения скриптов отображается в разделе Pipelines. В нём можно перезапускать любую из стадий выполнения скрипта деплоя.
А если заморочиться с подсовыванием в теги образов короткого тэга коммита
$CI_COMMIT_TAG
, можно хранить в гитлабе инкрементальную коллекцию образов, соответствующих каждому коммиту. Это даёт возможность нажатием одной кнопки в любой момент времени откатиться на прошлую версию в течение пары секунд. Или на позапрошлую. Или вообще на год назад, если мы можем позволить себе дисковое пространство для хранения такой истории.Механизм подсовывания примерно такой. В файлы с переменными окружения, после выполнения операции
cp ${FILE_VAR_NAME} .env
подсовывается строка tag_suffix = $CI_COMMIT_SHORT_SHA
, и соответствующее значение начинает подтягиваться в тэг образа.Сей поток сознания - изложение опыта работы с гитлабом, полученного примерно за 16 часов, 8 в июле, 8 - на этой неделе. А предваряла им пара лет эпизодических мучений с GitHub Actions и докером. Естественно, нормальный девопс сделает лучше и быстрее, но если его нет под рукой, вполне реально завести небольшое хозяйство самостоятельно.
#gitlab
#devops
BY Эшу быдлокодит

Share with your friend now:
tg-me.com/eshu_coding/356