По поводу поста
https://t.me/chiki_briki_it/132 от подписчика пришло вот такое мнение:
Привет. Суть make для разного рода проектов в том, что он позволяет скрыть разного рода команды и хранить их унифицированно. Посмотрим на примере. У меня есть несколько заказчиков, я для них написал небольшой набор плейбуков и ролей на ансибле. У этих плейбуков единый костяк, но они чуть отличаются per кастомер. Соответственно, я при ручных деплоях запускаю что-то типа
ansible-playbook -i inventory/customer.hosts -K --ask-vault-pass run-minimal.yml
. Таких плейбуков типа run-minimal.yml набралось уже около 30. Спустя какое-то время возникают следующие проблемы:
1. Очень надоедает писать всю эту простыню руками. Поиск по C-r не спасает, потому что плейбуков 30 * N кастомеров, запускается оно часто. Решение приходит постепенно. Сначала мы делаем
alias apl=ansible-playbook
, потом мы засовываем аргументы в shebang (а чо, так можно было? - постоянно спрашивают меня коллеги).
2. Эту хню надо запускать не только руками, но часто на проде, где надо автоматически вводить become password и vault password. Для vault в ансибле есть удобное решение. Для become нет ничего, кроме того чтобы запрашивать из extra vars. Ты к аргументам добавляешь конструкцию вида
-e @extra/vars.yml
, в которой тащишь env var, которую пробрасываешь в become. Все это снова приезжает в shebang каждого плейбука.
3. Тут внезапно оказывается, что ты в CI хочешь делать так, как есть, а на локальной машине хочешь использовать mitogen еще. И у тебя ansible.cfg в репе. И ты не хочешь вписывать mitogen_linear в него, потому что на CI нет митогена и все развалится. И ты снова придумываешь с env vars, но теперь их надо экспортить перед тем, как ты запускаешь плейбуки локально и про это надо не забывать.
4. И тут ансибл обновляется и говорит "чувак, теперь вместо sudo_user" можно использовать только "become_user" и ты идешь и все шебанги во всех плейбуках для всех кастомеров переписываешь. Ну чо, sed позапускал, все норм вроде.
Так вот. Вместо этого всего ты делаешь make и кладешь его в оригинальную репу. И в этот make вписываешь все, что тебе нужно. И когда придет время менять синтаксис, он поменяется в одном makefile, а не в 150 плейбуках. Когда надо будет что-то добавить, оно снова поменяется в 1 makefile. А еще можно выкинуть
alias apl=ansible-playbook
. А еще можно переменные окружения настраивать автоматически перед вызовом деплоя. Ну и митоген можно локально настраивать тут же, а на CI не делать этого.
И таких примеров, на самом деле, не слишком уж много и я вообще прекрасно жил без make лет примерно 15. А потом внезапно понял, что на моем объеме автоматизации он решает кучу задач и вообще очень норм. (c)
От себя добавлю - Makefile и правда бывает удобен, для того чтобы забутстрапить сборку, например. Сам использовал Makefile в прошлом году, для запуска плейбуков ansible + генерации vars для них и мне даже понравилось, но ощущения были странные.