Найти тему

Подсказки по CI\CD когда это нужно в повседневной работе

Оглавление
Картинка скомпанована из источников сети интернет с личной подписью. Авторские права принадлежат их авторам, а изображение отражает смысл статьи.
Картинка скомпанована из источников сети интернет с личной подписью. Авторские права принадлежат их авторам, а изображение отражает смысл статьи.

Технология CI с первого взгляда может показаться не такой уж и сложно, но везде есть подводные камни. Важным замечанием при подготовке CI\CD вы должны понимать две стороны проекта:

- Вы должны четко понимать какие компоненты вам нужны.
- Какой контейнер для этого нужен и полные его состав ПО.
- В какой последовательности и на каких портах должен работать ваш проект.
- Какие контейнеры с чем должны взаимодействовать.

Я перечислил основные моменты, но есть еще один важный и особо существенный навык - это знание DevOPS составляющей. Вы должны быть неплохим администратором Linux системы. Основное что вы должны понимать в Linux системах:
- Выбрать ОС и сосредоточится на изучении ее элементов.
- Что работает на уровне ядра, а что на уровне ОС.
- Чем отличается установка готовой сборки, или сборка самостоятельно.
- Как работает сеть в рамках Linux, и Forewal в том числе, что такой iptables.

Формально при подготовке CI\CD, и эксплуатации созданной инфраструктуры, ваша задача сводится к полному погружению во все компоненты и они всегда будут неразрывны.

В помощь при начале работы с CI, давайте рассмотрим базовый образ основной корневой системы на которой будет работать ваш CI\CD и какие там сложности есть. Статья станет небольшой записной книжкой с рецептом как не сломать голову при настройке.

Все рецепты подходят для настройки gitlab-runner на Debian 11 и частично для deb ОС Linux

При развитии дистрибутива Debian и выходом 11 его версии, можно столкнуться с такой ситуацией, что после использования команды su, для перехода из обычного пользователя в суперпользователя root, команда Usermod будет выдавать сообщение "command not found".

Это следствие использования команды su, пользователю root передается переменная $PATH обычного пользователя, среди которых отсутствует /usr/sbin и тут наступает ситуация есть два выхода:

  • Запускать сессию суперпользователя НЕ через команду su, а через команду su -
  • Использовать полный путь к usermod, т. е. /usr/sbin/usermod - например, /usr/sbin/usermod -aG sudo recluse ( ВОТ ЭТО и рекомендуется делать всегда начиная с версии Debian 11).

Указание полных путей в Linux приветствуется в большей степени, чем попытки использовать su. Это лично мое мнение, а как делать вам, лежит на вашем опыте и привычке.

Устанавливаем NVM для всех пользователей системы.

Это еще один момент при работе. При разработке программных продуктов лучше всего работать на одной версии node. Да это затраты времени, но в одной из своих статей я писал как это важно для бизнеса и развития ПО в целом.

Итак, чтобы Node для всех пользователей в том числе и gitlab-runner был один и вы не имели проблем с зависимостями нужно:

n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

Да, это так просто, и опять вы видите полное указание путей где, что лежит. Так же важно правильно задавать права на директории. Помните лишние права не нужны - это дыра в безопасности. Всегда давайте только те права которые вам нужны для работы и не более.

Всегда свои проекты проверяй сам.

Сделав настройки deploy не поленись на host машине запустить свой проект ручками. CI\CD - это помощник в повседневной жизни и разработке, но не средство диагностики. Поэтому не поленись и перед началом запуска CI runner, зайди под пользователем gitlab-runner в систему и сделай все ручками как это выполнит ваш робот. Если ошибок не найдешь отлично, увидишь ошибку исправляй.