Как стать автором
Обновить

Комментарии 26

Puppet, chef, ansible?

Как вариант еще можно рассмотреть SaltStack
Честно, первый раз слышу о них) Может быть, если бы знал, то не сделал бы это. Спасибо, прочту, отпишусь
Ну make точно нет, так как проверки выполнения целей там нет, а мне она нужна был
М-м… ну вообще-то он даже синтаксисом на ваше решение похож :)
Конечно в плане проверки «установлен ли пакет»… надо самому правило написать,
но make более масштабная вещь, в каком-то смысле это не его уровень.
Для автоматизации развёртывания это как раз ansible со товарищи…
Так что Вы зря про «точно нет»…

P.S. Просто он наиболее близок к bash, как я понял Вам это удобно. Все цели
это по сути bash команды.
Я, если честно, с него и брал синтаксис. Изначально я и пытался сделать всё на make, но сильно с ним намучился. И у меня не получилось там сделать подобия проверки выполнения цели. Если я правильно понимаю, make был сделан для C/C++ и в основном работает с ними. Скажите, как можно сделать проверку выполнения цели в make?
>> Если я правильно понимаю, make был сделан для C/C++ и в основном работает с ними.
Нет. Это универсальная система, не привязанная к языкам. Есть совершенно разные проекты, которые собираются при помощи 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 позволяет делать более сложные и иерархичные вещи. Его цель «управление зависимостями» сборки.
Спасибо, я понял. К сожалению, не всегда результатом работы будет файл) Наверное, ansible более интересный в этом плане. Буду копать в его сторону
Да конечно. От ansible не отговариваю, это очень удобная «штука».
Вам главное понять, что ansible и make не взаимоисключающие вещи )
make идеален, если вы преобразуете файлы. Соответственно, в его терминах — сокет или pid-файл — результат выполнения операции «перезапустить серверный процесс», если условием является config-файл.
Если скрипты миграции базы у вас пишут свои результаты работы в файл, а в качестве условия для них работают .sql — файлы — тоже все получится. Соответственно, если миграция нормально не применилась, скрипт должен завершиться с ненулевым кодом возврата.

а чем ansible то не угодил? Инфраструктура на нём, куча плейбуков для любых платформ и ПО, можно и для деплоя роли на нём, можно для деплоя fabric https://habrahabr.ru/post/141271/ https://habrahabr.ru/post/257671/


чтобы его можно было запустить из любой среды Linux без дополнительных действий

но его надо запускать с сервера, и если надо обслужить несколько серверов — ставить и запускать на каждом.
А ansible стоит на твоей машине и не требует установки на сервера, можно запускать задачи на несколько серверов одновременно, можно ставить условия в зависимости от платформ, так же поддерживает состояния и не будет ставить то что уже установлено, и помимо прочего состояния поддерживаются для правок конфигов, баз, юзеров и т.п.

Вот про ansible я не знал) Сейчас пытаюсь понять — как это работает
Вы написали заново Ant / Phing
Поздравляю.
Вы правы, Ant я посмотрел и он мне понравился. Конечно, формат XML — это не очень, ИМХО) Ну и единственное, что он предназначен для Java. Это сразу же ограничивает круг применения, я об этом написал) А Phing, как я понял, для PHP
Phing — на PHP, а не для PHP. Что, впрочем, никак не ограничивает его область применения.

По крайней мере запустить сценарий на phing гораааздно проще, чем Ant.
1. Ansible + Vagrant для автоматизации развертывания виртуальной машины, просто ansible для настройки продуктивного сервера.
2. Поглядел Ваш скрипт, всегда считал хорошим тоном — выносить переменные в начало скрипта, у Вас они ни в начале, ни в конце, а где-то посередине и в разных местах.
А вот тут(клац) я услышал голоса в голове, которые говорили прекрати на это смотреть или «убей их всех».
Вы серьезно? 3 вложенных цикла for и там же куча if… else с ними. Как это развидеть? О мои глаза....!1

Статья — очередной костыль, а не велосипед.
Но когда окажется, что ваш bash-сценарий превысил в объеме сотню строк или вам потребовались средства, которыми bash не обладает, это будет означать, что настало время переходить к языку Perl или Python.
©Evi Nemeth
Во-первых, я реально не знаю, как обойтись здесь без вложенных циклов и if..else. Это не json, а просто текст, который надо было обрабатывать. Я не имею писать на bash, но взял именно его по той причине, которую описал в статье — очень хотелось иметь сборщик. который практически не требует зависимостей. К тому же, если в файлах сборки используется bash — то, наверное, правильнее писать на bash)
Но я Вас услышал, действительно, хотелось бы перевести это в более наглядную форму, если это вообще имеет смысл. Всё же данная статья была не столько обзором, сколько просьбой спросить совета: «А правильно ли я сделал или есть уже штуки, решающие мою проблему?»

Насчёт переменных — я тоже люблю их выносить в начале, но в данном случае мне было удобнее иметь переменные перед основным кодом выполнения скрипта, а функции убрать подальше)
Сомнительное предприятие — не умеете писать на bash, но пришли на Хабр со статьей по самописному скрипту. Можно и Gentoo установить набором команд в одну строку, но зачем? Я не хочу отправлять Вас в Гугл на поиски, возможно Вы с ним в ссоре. Я попробую Вам помочь, если уж Bash, то держите: github.com/serghey-rodin/vesta.
Но все же лучше взгляните на ansible либо salt stack и придерживайтесь фразы «do not repeat yourself».
Ну таки я же сразу сказал, что хочу скорее отзывов и направлений на путь истинный) Всё же отзывов и решений я получил больше, чем просто бы запостил вопрос на SO) Да, я уже решил, что заменю монстра на ansible, но всё равно спасибо)
Я бы написал в личку, но мобильное приложение забрать не позволяет, либо я не знаю как это сделать, но все же есть toster.ru, на so ваш вопрос вероятно заблокируют с пометкой «дубль».
нет словаре слова Хабр, упустил.
*забрать — Хабр
Чем вам тот же питон не угодил в таком случае? Позвать системные утилиты чтобы поставить зависимость не составляет проблемы и на порядок понятнее bash-ада из разных вариантов сочетаний кавычек, скобок и символа доллара. Тут же на месте еще и интерактивную документацию впилить можно.
А еще есть такая штука как docker
пс… молчи, тут человек героически преодолевает

Для начала, насчет джанги не знаю, но рельсы могут работать в двух режимах — отладки и продакшена. в режиме отладки перечитывается код контролеров, моделей, вьюшек, роутов,
кроме конфига приложения, ручками только миграции делать.
В режиме продакшена выключается дофига всего отладочно лишнего, и как запустил код (в том же докере), так оно и будет жужжать.
У меня кстати, это вот в продакшене жужжит с nginx + passenger. время ответа убыстряется в разы

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