Пълно ръководство за софтуерни хранилища: Видове, управление и експлоатация

  • Дефиниция на хранилищата като централизирани дигитални хранилища за софтуер и контрол на версиите.
  • Разграничение между хранилища на пакети за операционни системи и платформи за сътрудничество по код.
  • Значение на мениджърите на пакети и системите за контрол на версиите в цикъла на разработка.

Изглед на модерна сървърна зала със синьо осветление, представляваща инфраструктурата за съхранение на софтуерно хранилище.

Когато се потопим в света на програмирането или започнем да се занимаваме с операционни системи като Linux, е много често срещано да се натъкнем на термина хранилище. По принцип можем да кажем, че хранилището е цифрово пространство за съхранение, където се съхраняват данни, документи и особено изходен код, така че да може да бъде извлечен, модифициран и споделен от общност от разработчици или определена организация.

Въпреки че много хора смятат, че те са само за съхранение на файлове, реалността е, че хранилищата са от основно значение за мащабируемостта и сигурността на съвременния софтуер. От контрол на версиите, който ни предпазва от случайно изтриване на работата на колега, до сървъри, които ни позволяват да инсталираме приложение с една единствена команда, хранилищата са сърцето на съвременното софтуерно инженерство.

Внедряване на Linux
Свързана статия:
Урок за внедряване на Linux: Как да хоствате уеб сървър на мобилния си телефон

Видове хранилища според тяхното предназначение

Фокусиран софтуерен разработчик, работещ с два монитора в модерен офис, изобразявайки създаването на изходния код.

Не всички хранилища правят едно и също нещо; има голямо разнообразие в зависимост от това какво трябва да съхранявате и как искате да го управлявате. Например, хранилищата за контрол на версиите се фокусират върху архивирането на изходния код и записването на всяка малка направена промяна, което позволява на разработчиците да се върнат към предишни версии, ако нещо се обърка (известното „връщане назад“). Класически примери тук биха били GitHub, SVN или CVS.

От друга страна, имаме софтуерни хранилища , които са много често срещани в екосистемата GNU/Linux. Вместо суров код, тук намираме предварително компилирани пакети, готови за инсталиране, заедно с техните метаданни и зависимости. Тези хранилища могат да бъдат отдалечени, хоствани на облачни сървъри или локални, като например инсталационно DVD. Мениджъри на пакети като APT в Debian за мобилни устройства , yum в Red Hat или zypper в openSUSE се използват за управление на всичко това.

търсене на приложения с отворен код с F-Droid
Свързана статия:
Пълно ръководство за намиране на приложения с отворен код с F-Droid

Съществуват и други, по-специфични вариации:

  • Хранилища за метаданни: Използва се в сложни инфраструктури за съхраняване на информация за контекста и средата на системата, без да се докосва изходният код.
  • Хранилища на документни сървъри: Като arXiv, където научни статии се публикуват и рецензират от експерти, преди да бъдат достъпни.
  • CASE хранилища: Специално проектиран за компютърно подпомогнато софтуерно инженерство, съхраняващ цялата проектна документация и данни.

Контрол на версиите: Сблъсъкът между Git и SVN

Екип от програмисти, работещи по софтуерен проект в среда на технологичен офис, илюстриращ споделена работа в хранилища.

За разработчиците на софтуер, изборът на правилния инструмент за контрол на версиите е от решаващо значение. Тук се намесват Git и SVN. Въпреки че споделят целта за управление на версиите на кода, те функционират по съвсем различни начини. Git е разпределена система , което означава, че всеки разработчик има пълно копие на историята на версиите на собствената си машина. Това я прави изключително бърза и позволява работа офлайн.

За разлика от това, SVN използва централизиран модел . Има един сървър, който съхранява цялата история, и потребителите трябва да се свържат с него, за да видят по-стари версии или да качат промени. Докато Git е много гъвкав с клонове, този процес често е по-тромав в SVN. Освен това, SVN има предимство в проекти с много двоични файлове , тъй като ви позволява да заключвате файлове, така че никой друг да не може да ги редактира, докато някой работи върху тях – нещо, което Git не предлага вградено.

Инсталиране на Manjaro ARM на Android таблети за използване на Arch Linux
Свързана статия:
Инсталиране на Manjaro ARM на Android таблети за използване на Arch Linux

Работни процеси и сътрудничество в GitHub

Софтуерен инженер, който наблюдава сървъри в център за данни, свързвайки разработването на софтуер с инфраструктурата за внедряване.

Когато използваме платформи като GitHub, работният процес става много по-организиран благодарение на ключови концепции. Разклоняването включва създаване на копие на основния код, за да се разработи нова функция или да се поправи грешка, без да се нарушава съществуващата работеща версия. След като програмистът завърши промените си, той прави commit , което по същество е запазване на промените с описателна бележка.

За да се направят тези промени в официалната версия, се използва pull request . Други участници преглеждат кода, предлагат подобрения и ако всичко е наред, се извършва сливане (merge) , интегрирайки новите функции в основния клон. За да оптимизират това, много екипи използват модела Gitflow , който организира работата в специфични клонове: Master (производство), Development (интеграция), Feature (нови функции), Release (подготовка за издание) и Hotfix (спешни поправки).

Модел-Изглед-ИзгледМодел
Свързана статия:
Пълно ръководство за овладяване на архитектурния модел MVVM

Управление на пакети и сигурност

Двама разработчици обсъждат редове код на екран, илюстрирайки прегледа на кода и процеса на Pull Request.

В операционните системи хранилището не е просто колекция от файлове; то е интелигентна система. Пакетите включват информация за зависимости , която се отнася до други програми, необходими за функционирането на приложението. Когато се опитате да инсталирате нещо, мениджърът на пакети автоматично търси конфигурираните хранилища за тези зависимости, така че не е нужно да инсталирате всеки компонент ръчно.

От гледна точка на сигурността, официалните хранилища са най-надеждният вариант. Много от тях използват цифрови подписи , за да гарантират, че софтуерът не е бил подправен от трети страни. Когато екипът се доверява на подписа на доставчик, възможността за инсталиране на зловреден софтуер е драстично намалена, което прави използването на антивирусна програма по-малко критично в някои среди. Освен това има хранилища и услуги на общността като openSUSE Build Service , въпреки че те трябва да се използват с по-голямо внимание, тъй като не са официални.

Популярни инструменти и екосистеми

В зависимост от езика за програмиране, има специфични хранилища, които са индустриален стандарт. Например, в Python имаме PyPI (използващ pip), в Node.js имаме NPM , в Java използваме Maven , а в PHP откриваме PECL . В случая с R, хранилището CRAN е от основно значение, тъй като извършва автоматизирани тестове (автоматични проверки) на множество операционни системи, за да гарантира, че предоставените пакети не нарушават стабилността на езика.

За компании, които трябва да управляват свои собствени двоични артефакти, са налични професионални решения като JFrog Artifactory, Sonatype Nexus или Apache Archiva . Изборът на инструмент винаги зависи от организационната култура и цикъла на пускане на пазара на компанията; екип, който пуска актуализации на всеки час, използвайки непрекъсната интеграция, ще има различни нужди от този със статични и бавни цикли на пускане.

Независимо дали говорим за съхранение на изходен код с Git или за разпространение на приложения, използващи мениджъри на пакети в Linux, хранилищата организират създаването и потреблението на софтуер. Благодарение на комбинацията от контрол на версиите, управление на зависимостите и работни процеси за сътрудничество, подобни на Gitflow, хиляди хора могат да работят по един и същ проект без хаос, гарантирайки, че кодът е стабилен, сигурен и лесен за актуализиране навсякъде по света.

Интеграционно тестване
Свързана статия:
Пълно ръководство за интеграционно тестване в слоя и стаята за постоянство

Добавяне като предпочитан източник в Google