все что связано с моей работой
Главная » Технические » Автоматизируем обновление Скиф-Свод

Автоматизируем обновление Скиф-Свод

Наверное это самая часто обновляемая программа в нашем парке. Вот и попробуем еще большее уменьшить рутину и “человеческий фактор”.

Правда пока автоматизируем установку уже скаченных обновлений. Скачивание штатными средствами ОС не получилось решить, вернее не получилось решить “хранение” данных об уже скаченных – установленных обновлениях, чтоб исключить повторы и зацикливание.

Итак. Обновление Скиф-Свод (дальше буду просто называть Скиф) бывает  4х видов:

  1. обновление клиента, выполняемые файлы и хелпы;
  2. обновление базы, sql-скрипт;
  3. обновление форм, шаблонов и контрольных соотношений, xml-файл(ы);
  4. и обновление бланков, xls- и xlt-файлы

Порядок обновления тоже незатейлив, и всегда выполняется в следующем порядке:

  1. обновление клиента, всегда самое первое. К слову обновление хелпов, утилиты печати можно и в конце сделать, но мы определились что это все это клиентское ПО;
  2. обновление базы, всегда на обновленном клиенте и до обновления шаблонов;
  3. обновление шаблонов;
  4. обновление бланков

Бывают случаи когда порядок надо нарушить, например установить обновление базы на старой версии “клиента”, но это исключение. И о таких ситуациях МФ сообщает за ранее.

Немного о возможности реализации. Вообще все это стало возможно только после того как в Скиф-е появилась возможность указывать параметры командной строки.

Параметры командной строки появились достаточно давно, пару лет назад. Просто идея автоматизации штатными средствами, а не написанием собственных “обновлялок”, родилась в начале года и почти 9 месяцев был тестовый режим. За это время у меня ни разу не было никаких проблем со “сценарием”
И еще… Подставь палец,она пол руки откусит… То что появились параметры ком. строки для загрузки это замечательно, но почему не появились коды возврата? Так и хочется сказать что, сделали “только отстаньте”. Проверить правильность загрузки по %ERRORLEVEL%. К слову сказать, пост “Bat скрипты. Процедуры” родился как раз в поисках этих самых кодов, забегая вперед – делал процедуры которые выполняли обновление и писали в файл код возврата. Но все оказалось мимо :(

Алгоритм нарисовывается достаточно простой: скачиваем в определенную папку файлы обновлений, и запускаем “программу” обновления. Которая в свою очередь распаковывает все zip-архивы в папке, обновления на сайте МФ в zip-архивах. И затем следуя порядку обновления все устанавливает-копирует. Ну и в заключение чистит за собой.

Рассмотрим некоторые места алгоритма более детально:

  1. в папке где находится клиент Скиф-а, создаем папку update;
  2. все текущие обновления скачиваем сюда;
  3. распаковывать будем любимым 7z, главное с ключом “e” – для того чтобы, из файлы из архивов распаковывались без путей. Папки “Бланки” или “Выходные формы” не страшны и даже было бы хорошо если б они были, но папки с обновлениями шаблонов иногда имеют такие имена (как собственно и имена файлов), что хоть как то их систематизировать их не представляется возможным (штатными средствами).
  4. далее по “порядку обновления” выхватываем все .exe, .chm и переносим их в папку с клиентом. Команда move /Y <что> <куда>, /Y – на все вопросы ответить Yes (при перезаписи);
  5. затем все sql-файлы и делаем обновление базы. Параметр: -rs<имя sql файла>;
  6. третий этап – шаблоны, т.е. все xml-файлы. Параметр: -it<имя xml файла>;
  7. Остались только бланки и выходные формы. Эмпирическим путем установлено что бланки это — .xls файлы, а .xlt – это преимущественно выходные формы, только файлы начинающиеся с blank* из них являются бланками.
Внимание! Здесь есть большая засада если — надо загружать шаблоны на выбор, например в годовом “с приказом” и “без приказа”. Наш батничек загрузит все! В таких случаях надо либо руками обновлять эти шаблоны, либо удалять не нужный файл из архива. С другой стороны “есть куда расти” (оптимизировать).

С алгоритмом наверно все, можно и реализовывать:

@echo off
:0 - распаковка всех zip-ов
for /R %%a in (*.zip) do call 7z e -y %%a

:1 - Обновление клиента всегда в первую очередь, все должно исполняться на новом клиенте
echo exe
if exist *.exe move /Y *.exe P:\skif\skif3\ 

:1.1 - обновление help-a
echo chm
if exist *.chm move /Y *.chm P:\skif\skif3\

:2 - Обновление базы. всегда раньше загрузки новых шаблонов
echo sql
if exist *.sql (
  for /R %%f in (*.sql) do ..\skif -sSERVER -dSkif3 -usa -p< Пароль sa> -rs"%%f" /fd
)

:3 - Обновление шаблонов
echo xml
if exist *.xml (
  for /R %%f in (*.xml) do ..\skif.exe -sSERVER -dSkif3 -usa -p< Пароль sa> -it"%%f" /fd
)

:4 - Обновление бланков
echo Бланки
echo xls
move /Y "*.xls" "P:\Skif\Skif3\Бланки\"
echo xlt
move /Y "blank*.*" "P:\Skif\Skif3\Бланки\"

:5 - Выходные формы
echo Выходные формы
move /Y "*.xlt" "P:\Skif\Skif3\Выходные формы\"

echo Чистим за собой
del *.txt *.sql *.xml *.exe *.chm *.xls *.xlt /Q
for /D %%d in (*.*) do rd /S /Q "%%d"

Не забываем заменить  “<Пароль sa>” на ваш пароль от пользователя sa

Скачать сценарий можно тут:
Скачать

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.