Some useful scripts for redmine administration with public beta strategy /
Набор полезных скриптов для администрирования системы Redmine. Предполагается что разработка ведется прямо на сервере
по идеологии "публичное бета" на живых данных.
- Чтобы упростить обновления Redmine до новых версий (то же и с плагинами).
Вероятность поломки основной версии Redmine снижается за счет того, что все установки плагинов и изменения настроек тестируется на публичной beta с использованием git branching model.
2) Облегчения понимания что, после чего и почему сломалось. Особенно если это связано с изменением модели базы данных - скрипты коммитят в репозитарий метаинформацию о базе данных, также сохраняют изменения schema.rb и последний прямой и обратный mysql запрос миграции с использованием mysqldiff.
3) Удобство публикации собственного форка системы на Github. В нашем случае форком можно считать файловую систему основной версии со скопированными в неё плагинами и темами.
4) Полностью автоматизировать резервное копирование системы в различные хранилища (Яндекс.Диск и другой ftp-сервер)
5) Быстрое развернуть систему в случае переезда на другой сервер (из резервных копий и из репозитария).
Все скрипты можно поделить на 4 категориии:
- Те, которые регулярно используются при разработке. Сюда же и относятся те, что прописываются в git hooks. Для удобства имя этих скриптов начинается с номера.
- Служебные скрипты, которые используются редко.
- Те, которые висят в cron. Таких скрипта пока три - один регулярно тянет изменения с главного репозитария в репозитаорий-зеркало,
второй делает бэкапы базы данных, а третий делает ее снимки и ее с базой публичной beta системы.
- Perl-скрипты. Пока такой скрипт один - который упрощает представление модели базы и позволяет наглядно оценить её изменения.
Есть еще 5 категория - старые скрипты, помеченные на удаление. Такеи скрипты начинаются с префикса rm и несут в себе исключительно эстетическую ценность
Все настройки хранятся в папке configs.
bash-скрипты используют файл main.cfg в качестве главного конфига (в нем хранятся абсолютные пути). Прежде чем запускать любой bash скрипт, проверьте правильность указания путей в main.cfg
Кроме того там должны лежать три .yml файлика с настройками базы для основной версии, beta версии и версий для тестового развертывания.
Формат их примерно такой:
production: adapter: mysql2 database: redmine_old host: localhost username: test password: "0000" encoding: utf8По понятным причинам эти файлы добавлены в .gitignore. Именно эти файлы будут скопированы в мастер версию при обновлении беты, и при восстановлении бета версии из мастера. Словом - поддерживайте их всегда в актуальном состоянии.
Кроме того, в папке configs лежит файлик gitignore-custom.txt. Замените им оригинальный gitignore в beta и production версиях. От оригинального он отличается тем, что позволяет добавлять в коммиты файлы плагинов и schema.rb
Здесь же, в папке configs лежиn и pre-commit скрипт. Он в свою очередь, запускает два скрипта: Perl-скрипт get_schema.pl и скрипт calculate_plugin_migration.sh
Perl-скрипт генерирует текстовый файл с человекочитаемым представлением модели базы данных, кладёт её в папку /db и на всякий случай делает git add. В качестве параметра скрипту нужно передавать путь до database.yml
Второй скрипт (calculate_plugin_migration.sh) предполагает использование дополнительной базы данных для вычисления последней миграции в sql. Внимание! Для этой базы данных пользователь бета-версии Redmine должен иметь полный доступ.
Имя базы прописывается в начале скрипта в параметре DB_FOR_MANIPULATION
Оба запускаемых скрипта (Perl-скрипт get_schema.pl и calculate_plugin_migration.sh) при начале работы должны лежать в директории /db бета-версии Redmine
Если не хотите сами их копировать - запустите init.sh
По сути это мини юнит-тест, что все параметры инициализированы правильно и корректор этих параметров в одном скрипте.
Скрипт сделает папку logs для отслеживания выполнения cron-скриптов, а также скопирует нужные для хука скрипты
и сам хук (если они уже есть в репозитарии - всё перезаписывается)
Показывает в каком состоянии сейчас находятся рабочие копии бета и продакшн версий (ветки и последние 3 коммита)
Обновляет продакшн-версию из беты и выполяет развёртывание.
Миграция базы также используется стандартная - rake db:migrate.
Конфиги для базы записываются из папки configs.
Надеюсь что его использовать придётся не часто, но тем не менее тоже присвоил ему номер-приставку.
Этот скрипт возвращает бета к состоянию мастера, сохраняя development branching model. Также сразу выполняет развёртывание.
A---B---C develop_2.5.0 (redmine core + plugins + themes) / D---E---F---G master(redmine core)
Полезно на случай если вдруг вы или кто-то из разработчиков что-то напутает с git'ом в бета-репозитарии и проще
будет потерять все изменения и откатиться до последних стабильных правок.
сравнивает две схемы базы данных и возвращает ответ в виде upgrade и downgrade-миграции (файлы в каталоге migrations). развёртывает оба приложения по адресам old.redmine.fablab61.ru и beta.redmine.fablab61.ru
внимание! для развёртывания старой версии используется gem mysql вместо mysql2, поэтому первым параметром задавать версии не выше 2.1.0,
иначе нет гарантии что скрипт сработает.
/configs/main.cfg - главный файл конфигурации для всех скриптов (здесь прописаны все пути)
Конфигурационные файлы. Не забудьте сюда вписать свои пароли :)
всё, что неплохо бы запихать в crontab.
backup.sh - бэкап продакшн-базы по расписанию. Складывает всё в BACKUP_DIR, определенную в главном конфигурационном файле.
Скрипты на Perl
get_version.pl - добавляет много полезной информации в бекап о базе данных. Использует DBI
test_http.pl - тестирует ответы сервера используя Mojo::Test
+1 плагин = +1 коммит. Иначе потом трудно будет откатиться базе.
Перед тем как запустить rake redmine:plugins:migrate RAILS_ENV=production запустите pre_plugin_migration.sh