Skip to content

FabLab61/redmine-scripts

Repository files navigation

redmine-scripts

Some useful scripts for redmine administration with public beta strategy /
Набор полезных скриптов для администрирования системы Redmine. Предполагается что разработка ведется прямо на сервере по идеологии "публичное бета" на живых данных.

Для чего всё это создавалось?

  1. Чтобы упростить обновления Redmine до новых версий (то же и с плагинами).

    Вероятность поломки основной версии Redmine снижается за счет того, что все установки плагинов и изменения настроек тестируется на публичной beta с использованием git branching model.

2) Облегчения понимания что, после чего и почему сломалось. Особенно если это связано с изменением модели базы данных - скрипты коммитят в репозитарий метаинформацию о базе данных, также сохраняют изменения schema.rb и последний прямой и обратный mysql запрос миграции с использованием mysqldiff.

3) Удобство публикации собственного форка системы на Github. В нашем случае форком можно считать файловую систему основной версии со скопированными в неё плагинами и темами.

4) Полностью автоматизировать резервное копирование системы в различные хранилища (Яндекс.Диск и другой ftp-сервер)

5) Быстрое развернуть систему в случае переезда на другой сервер (из резервных копий и из репозитария).

Начало работы.

Все скрипты можно поделить на 4 категориии:

  1. Те, которые регулярно используются при разработке. Сюда же и относятся те, что прописываются в git hooks. Для удобства имя этих скриптов начинается с номера.
  2. Служебные скрипты, которые используются редко.
  3. Те, которые висят в cron. Таких скрипта пока три - один регулярно тянет изменения с главного репозитария в репозитаорий-зеркало, второй делает бэкапы базы данных, а третий делает ее снимки и ее с базой публичной beta системы.
  4. 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

Pre-commit hook


Здесь же, в папке 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

init.sh

По сути это мини юнит-тест, что все параметры инициализированы правильно и корректор этих параметров в одном скрипте.
Скрипт сделает папку logs для отслеживания выполнения cron-скриптов, а также скопирует нужные для хука скрипты
и сам хук (если они уже есть в репозитарии - всё перезаписывается)

Подробное описание основных скриптов.

01_check-versions.sh

Показывает в каком состоянии сейчас находятся рабочие копии бета и продакшн версий (ветки и последние 3 коммита)

02_update-master.sh

Обновляет продакшн-версию из беты и выполяет развёртывание.
Миграция базы также используется стандартная - rake db:migrate.
Конфиги для базы записываются из папки configs.

03_reset-beta.sh

Надеюсь что его использовать придётся не часто, но тем не менее тоже присвоил ему номер-приставку.
Этот скрипт возвращает бета к состоянию мастера, сохраняя development branching model. Также сразу выполняет развёртывание.

  A---B---C develop_2.5.0 (redmine core + plugins + themes)
 /
D---E---F---G master(redmine core)

Полезно на случай если вдруг вы или кто-то из разработчиков что-то напутает с git'ом в бета-репозитарии и проще будет потерять все изменения и откатиться до последних стабильных правок.

Подробное описание служебных скриптов

compare-db.sh

сравнивает две схемы базы данных и возвращает ответ в виде upgrade и downgrade-миграции (файлы в каталоге migrations). развёртывает оба приложения по адресам old.redmine.fablab61.ru и beta.redmine.fablab61.ru
внимание! для развёртывания старой версии используется gem mysql вместо mysql2, поэтому первым параметром задавать версии не выше 2.1.0, иначе нет гарантии что скрипт сработает.

Структура проекта

/configs

/configs/main.cfg - главный файл конфигурации для всех скриптов (здесь прописаны все пути)
Конфигурационные файлы. Не забудьте сюда вписать свои пароли :)

/cron

всё, что неплохо бы запихать в crontab.
backup.sh - бэкап продакшн-базы по расписанию. Складывает всё в BACKUP_DIR, определенную в главном конфигурационном файле.

/perl

Скрипты на Perl

get_version.pl - добавляет много полезной информации в бекап о базе данных. Использует DBI
test_http.pl - тестирует ответы сервера используя Mojo::Test

Цикл разработки

Принципы

+1 плагин = +1 коммит. Иначе потом трудно будет откатиться базе.
Перед тем как запустить rake redmine:plugins:migrate RAILS_ENV=production запустите pre_plugin_migration.sh

About

Script to make simple deployment of FabLab beta

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published