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