Автоматическое обновление приложений с использованием GIT репозитория

в 10:38, , рубрики: C#, Git, github, автоматизация, автоматическое обновление, жизненный цикл приложения, ненормальное программирование, пользователи, Программирование, метки:

image
Думаю, многие программисты в тот или иной момент сталкивались с тем, что нужно как-то решить проблему с доставкой обновлений своего ПО до пользователей.
Способов ее решения множество, я хочу предложить еще один, который мне показался интересным. Он не претендует на звание идеального, но имеет право жить.
Всем программистам я думаю известно, что такое GIT (распределённая система управления версиями), данный способ публикации приложения основан на данной системе.

Но при использовании GIT под Windows есть некоторые проблемы, например все найденные мною клиенты GIT, даже в Portable (без установки) версии:
• Занимают много памяти на диске, много требуется скачивать (от 15 до 450 МБ)
• Содержат множество папок и файлов, неудобно их все переносить вместе со своим приложением

Решением данных проблем я и занялся. Что из этого вышло:
Клиент для GIT, который имеет 2 функции (Clone и Pull) на основе LibGit2Sharp
Вес клиента 1,5 Мб в архиве и 3 Мб на диске
Запуск из командной строки
• Всего 5 файлов, которые при желании можно объединить в 1. (1 исполняемый и 4 dll библиотеки)

Процесс публикации в GIT обычно состоит из нескольких простых этапов:

  1. Регистрация и вход в систему управления репозиторием GIT,
  2. Создание репозитория,
  3. Инициализация репозитория на локальной машине,
  4. Загрузка в него проекта,
  5. Commit (сохранение изменений) и публикация репозитория.

Первые 4 шага производятся 1 раз и занимают обычно пару минут.
Последний шаг производится каждый раз, когда требуется опубликовать новую версию приложения.

Какие преимущества это дает:

  • Хранение каждой версии приложения и при необходимости быстрый «откат» к старой версии;
  • Загрузка только измененных файлов, вместо загрузки всего приложения (GIT PULL);
  • Публикация «загрузчика» вместо приложения, чтобы быть уверенным, что с какого бы источника не было скачено приложение, оно всегда будет загружать последнюю его версию;
  • Сбой в работе приложения никак не влияет на его загрузчик; соответственно даже при неудачной публикации приложение можно восстановить, достаточно опубликовать рабочую его версию и она снова загрузится всем пользователям;
  • Для дистрибутива и исходных кодов можно использовать отдельные репозитории;
  • Обновлять можно любое приложение, так как ничего в приложении переделывать не требуется;
  • При желании можно обновлять все что угодно, будь то библиотека документации например.

image

Как это работает?
Достаточно создать Bat файл или ярлык на приложение с параметрами, в которых указать URL репозитория и название папки в которую приложение будет загружено. gitnano [urlgit] [dirname]

Например
gitnano.exe github.com/vpuhoff/GitNanoCompiled GitNano

Приложение:

  • если найдет уже скачанный репозиторий, попробует сделать Pull.
  • Если что пойдет не так (например конфликты возникнут), то просто сделает clone еще раз и заменит старую папку на новую.

Естественно все изменения в старой папке сотрутся, что отлично подходит для задачи обновления приложений.

Исходники и ссылка на приложение размещены в GITHUB и доступны все желающим. Предложения по доработке приветствуются.

Надеюсь эта статья поможет тем, кто ищет простой и удобный способ обновлять свое приложение из сети.

Автор: vpuhoff

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js