Comments 26
Puppet, chef, ansible?
Конечно в плане проверки «установлен ли пакет»… надо самому правило написать,
но make более масштабная вещь, в каком-то смысле это не его уровень.
Для автоматизации развёртывания это как раз ansible со товарищи…
Так что Вы зря про «точно нет»…
P.S. Просто он наиболее близок к bash, как я понял Вам это удобно. Все цели
это по сути bash команды.
Нет. Это универсальная система, не привязанная к языкам. Есть совершенно разные проекты, которые собираются при помощи make. Триада «configure && make && make install» это очень древняя вещь ) Но т.к. make действительно уже старенький, новые проекты уже строят на чём-то более современном… cmake в частности.
>> Скажите, как можно сделать проверку выполнения цели в make?
Ну может я не совсем понимаю Вашу задачу. make — более рассчитан на присутствие или отсутствие файлов, атрибуты их изменения. Соответственно ваши «цели» должны что-то такое «производить» в виде файлов, чтобы можно было понять
что уже всё есть. Ну например пусть будет проверка установлен ли паке mypack в системе
mypack.dep:
xxx install mypack && touch mypack.dep
all-local: mypack.dep
...
В этом примере при команде make all пакет установится только первый раз,
т.к. в случае успеха будет создан файл mypack.dep, то при повторном make, эта команда не будет исполнена. Как-то так (я не очень большой специалист в make).
P.S. Это примитивный пример, make позволяет делать более сложные и иерархичные вещи. Его цель «управление зависимостями» сборки.
Если скрипты миграции базы у вас пишут свои результаты работы в файл, а в качестве условия для них работают .sql — файлы — тоже все получится. Соответственно, если миграция нормально не применилась, скрипт должен завершиться с ненулевым кодом возврата.
а чем ansible то не угодил? Инфраструктура на нём, куча плейбуков для любых платформ и ПО, можно и для деплоя роли на нём, можно для деплоя fabric https://habrahabr.ru/post/141271/ https://habrahabr.ru/post/257671/
чтобы его можно было запустить из любой среды Linux без дополнительных действий
но его надо запускать с сервера, и если надо обслужить несколько серверов — ставить и запускать на каждом.
А ansible стоит на твоей машине и не требует установки на сервера, можно запускать задачи на несколько серверов одновременно, можно ставить условия в зависимости от платформ, так же поддерживает состояния и не будет ставить то что уже установлено, и помимо прочего состояния поддерживаются для правок конфигов, баз, юзеров и т.п.
Поздравляю.
2. Поглядел Ваш скрипт, всегда считал хорошим тоном — выносить переменные в начало скрипта, у Вас они ни в начале, ни в конце, а где-то посередине и в разных местах.
А вот тут(клац) я услышал голоса в голове, которые говорили прекрати на это смотреть или «убей их всех».
Вы серьезно? 3 вложенных цикла for и там же куча if… else с ними. Как это развидеть? О мои глаза....!1
Статья — очередной костыль, а не велосипед.
Но когда окажется, что ваш bash-сценарий превысил в объеме сотню строк или вам потребовались средства, которыми bash не обладает, это будет означать, что настало время переходить к языку Perl или Python.©Evi Nemeth
Но я Вас услышал, действительно, хотелось бы перевести это в более наглядную форму, если это вообще имеет смысл. Всё же данная статья была не столько обзором, сколько просьбой спросить совета: «А правильно ли я сделал или есть уже штуки, решающие мою проблему?»
Насчёт переменных — я тоже люблю их выносить в начале, но в данном случае мне было удобнее иметь переменные перед основным кодом выполнения скрипта, а функции убрать подальше)
Но все же лучше взгляните на ansible либо salt stack и придерживайтесь фразы «do not repeat yourself».
Для начала, насчет джанги не знаю, но рельсы могут работать в двух режимах — отладки и продакшена. в режиме отладки перечитывается код контролеров, моделей, вьюшек, роутов,
кроме конфига приложения, ручками только миграции делать.
В режиме продакшена выключается дофига всего отладочно лишнего, и как запустил код (в том же докере), так оно и будет жужжать.
У меня кстати, это вот в продакшене жужжит с nginx + passenger. время ответа убыстряется в разы
Своя система сборки на Linux