При разработке сайта для автоматизации процесса деплоя написал несколько bash скриптов.
Для настройки поведения скриптов использую передачу аргументов, которые в bash скрипте разбираются библиотекой getopts.
Getopts
Как правило, скрипты используют getopts для анализа аргументов, переданных им. Когда вы указываете args в командной строке, getopts анализирует эти аргументы вместо скрипта и дальше уже скрипт использует проанализированные данные, которые были разобраны getopts .
Например, в своём случае я использую несколько действий, которые должны быть выполнены скриптом.
- while getopts p:dicmz option
- do
- case "${option}"
- in
- p) PASSWORD=${OPTARG};; # Password for reload services: gunicorn and celery
- d) DEPLOY_PROJECT_PACKAGES=true;; # Deploy local projects packages
- i) INSTALL_REQUIREMENTS=true;; # Install or update new packages from requirements
- c) COLLECTSTATIC=true;; # Execute collectstatic
- m) MIGRATE=true;; # Execute migrate
- z) INGORE_BACKUP=true;; # WARNING: Be careful with this option.
- # Do not use it, when execute migrations or add new application or git submodule
- esac
- done
У меня выполняется деплой проекта на сайт, установка или обновление требуемых пакетов в проекте, сборка новой статики, миграция базы данных и если потребуется, то игнорирование создания бэкапа проекта, хотя этим я пользуюсь редко. Лучше перестраховаться лишний раз и выполнить бэкап.
Таким образом скрипт можно запустить с параметрами таким образом
- ./deploy.sh -icm -p mypassword
В данном случае будет передан пароль для выполнения специфичных функций требующих ввода пароля, а также будут выполнены установка или обновление требуемых пакетов, сборка статика и миграция базы данных.
Переданный параметр не требующий аргумента будет проверяться в условиях так
- if [ "$INGORE_BACKUP" ]
- then
- # Deployment without backup"
- else
- # Execute backup
- fi