При разработке сайта для автоматизации процесса деплоя написал несколько 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