python

Меню консольных команд на python

  • четверг, 20 февраля 2020 г. в 00:21:12
https://habr.com/ru/post/488946/
  • Python
  • DevOps


Приветствую Вас, коллеги. Меня зовут Рустам, я работаю в небольшой компании, которая занимается web-разработкой и продвижением сайтов.

Очень часто во время работы над каким-либо проектом возникают задачи решение которых требует ввода в консоль нескольких команд, такие как, например, пересборка фронтенда, запуск/остановка нескольких docker-контейнеров, развертывание окружения на новом девелоперском компе и тому подобные вещи.

Это вообщем то не сложно, но зачастую подобные задачи возникают весьма регулярно, требуют повторения, превращаясь в рутину.

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

Реализовать решил на Python т.к. из коробки он установлен на большинстве дистрибутивах линукс, и для использования не потребуется установки дополнительных пакетов.

Получилось нечто весьма удобное доступное для клонирования c гитхаб.

Все настройки (а именно что по какому пункту должно выполняться) хранятся в файле menu.yml.
Файл настроек приведенный в качестве примера в репозитории снабжен всеми необходимыми коментариями, но для того, чтобы все стало еще понятней есть рабочий пример на гитхабе (https://github.com/hrustbb2/env-example).

В качестве примера приведено приложение состоящее из трех docker-контейнеров (php, mysql, nginx) с отдельными конфигами для девелоп и продакшен окружений и двумя отдельными сценариями деплоя в этих окружениях.

Итак, клонируем, запускаем ./env и видим меню из трех пунктов:

0. Exit
1. Develop
2. Production
Chose action: _

Развернем наше приложение в девелоп-режиме, для этого выбираем пункт 1, проваливаемся в подменю:

0. Exit
1. Build
2. Deploy and Up
3. Up
4. Stop
5. Remove
Chose action: _

Здесь вначале создадим наши контейнеры выбрав 1, после чего необходимо придумать и ввести имя приложения. Здесь хочу обратить Ваше внимание на то, что параметры необходимые для выполнения тех или иных команд требуются ввести лишь один раз, далее они сохраняются в env.ini файл и при повторном запуске вводить их не требуется. Затем, немного подождав пока завершится создание контейнеров, запустим скрипт для деплоя самого приложения, выбрав 2.

В данном примере скрипт клонирует в ./app стартовое приложение Laravel, установит необходимые composer-пакеты, накатит миграции и создаст файл конфигурации .env. Делается это только один раз в самом начале, в последствии окружение запускается выбором пункта 3. Пункт 5 служит для удаления созданных контейнеров после того как они стали больше не нужны, например когда работа над проектом окончена.

Вот пожалуй все, теперь открываем в браузере localhost и продолжаем работу.

Иногда на продакшене возникает необходимость запускать некоторые команды автоматически по крону, например обновление SSL сертификатов, backup и т.п. В этом случае запускаем, например ./env -e 1-2-3, где 1-2-3 путь до нужной команды в меню.

Мне и моим коллегам принес немало пользы, немного облегчив им труд, надеюсь инструмент будет полезен и вам.

Всем удачи.