Git – це розподілена система контролю версіями файлів та спільної роботи, яка була розроблена у 2005 році Лінусом Торвальдсом. У перекладі з англійської назва «git» означає «негідник». Розробник пояснює таку назву з часткою сарказму: «Я егоїстичний негідник, а тому всі проєкти називаю на свою честь. Спочатку Linux, тепер – git».
Зараз Git є найпопулярнішим і безкоштовним інструментом, який є набором утиліт командного рядка. Він дозволяє відстежити історію розробки програмного забезпечення та працювати цілими командами з будь-якої точки світу над одним проєктом. Кожна зміна додається у вигляді комітів, що дозволяє відстежити, за необхідності скасувати зміну та повернутися до попередніх версій.
Крім комфортної роботи, гнучкості та можливості вести історію розробки, використання Git значно знижує появу помилок у розробці та втрату даних. Подібними SCM-системами управління версіями є Mercurial, Subversion, Darks, Bazaar. Однак, Git має ряд переваг:
- висока швидкість та прозорість;
- зручність використання під час нелінійної розробки;
- ефективність для проєктів будь-якого масштабу, зокрема, для великих систем із 1000 учасниками;
- збереження знімків репозиторіїв, що забезпечує високу швидкість роботи;
- можливість відновити код із локальної копії у разі, якщо сервер з віддаленим репозиторієм вийде з ладу;
- можливість швидко завантажити код із віддаленого сервера, при пошкодженні локальної копії.
Основні завдання Git:
- збереження коду та історії змін;
- збереження інформації про користувача, який вносить зміни до коду;
- відновлення будь-якої версії коду;
- поєднання різних версій, змін версій;
- підготовка коду до релізу.
Використання Git здійснюється за допомогою спеціальних хостингів та репозиторіїв.
GitHub був створений у 2008 році, а в 2018 році його викупила корпорація Microsoft за $7,5 млрд. GitHub являє собою хостинг вихідного коду, а також велику соцмережу розробників з 20 млн користувачів, які можуть переглядати коди один одного, допомагати в розробці та залишати коментарі, та 80 млн репозиторіїв по всьому світу. Користувачі можуть створювати свій репозиторій і публікувати свої роботи. Безкоштовне використання можливе лише для публічних проєктів з відкритим кодом. Платформа написана на Ruby on Rails і має велику кількість загальнодоступних проєктів із відкритим кодом.
Переваги GitHub:
- безкоштовне обслуговування;
- висока швидкість пошуку у структурі репозиторіїв;
- велика кількість користувачів, що забезпечує швидкий пошук допомоги у вирішенні задачі;
- наявність практичних інструментів для співпраці та інтеграції з Git;
- легкий процес інтеграції з іншими послугами;
- можливість роботи на TFS, HG, SVN.
GitLab є альтернативою GitHub, а також веб-сховищем з наданням безкоштовних відкритих і приватних сховищ. GitLab був розроблений двома українцями: Дмитром Запорожцем та Валерієм Сизовим, використовуючи Ruby та деякі частини Go. Пізніше архітектура була вдосконалена за допомогою Go, Vue.js та Ruby on Rails.
GitLab є повною платформою DevOps, що дозволяє планувати проєкт, керувати вихідним кодом, проводити моніторинг, забезпечити безпеку тощо. Він також пропонує хостинг для вікі та систему відстеження помилок. Використання GitLab значно скорочує життєвий цикл продукту та підвищує продуктивність. Це, зі свого боку, збільшує цінність клієнта.
Переваги GitLab:
- легкість налаштування;
- зручний інтерфейс та інструменти;
- нелімітована кількість безкоштовних приватних сховищ;
- можливість інтеграції великої кількості API та сторонніх служб;
- надійність та безвідмовність;
- можливість самостійного хостингу;
- ліцензія з відкритим кодом.
BitBucket – аналог GitHub, який призначений для хостингу проєктів та їхньої спільної розробки. Сервіс був розроблений австралійською компанією Atlassian, яка створила Jira та Confluence. Він дозволяє безкоштовно створювати відкриті та закриті репозиторії на основі технологій Git, має можливість інтегруватися з Jira та Snyk та вбудованими можливостями CI/CD. Сервіс є чудовим рішенням для невеликих команд.
Переваги BitBucket:
- нелімітована кількість відкритих та приватних репозиторіїв;
- підтримка публічних та закритих Git-репозиторіїв;
- можливість інтеграції з іншими рішеннями (Jira, Trello);
- можливість інтеграції зі сторонніми сервісами (Twitter, Google Analytics);
- можливість використання сервісу більше мільйона команд із 10 мільйонами розробників по всьому світу.
Jenkins є системою з відкритим кодом на основі Java. Вона забезпечує автоматизацію елементів процесу розробки ПЗ без залучення людей і безперервної інтеграції ПЗ. Jenkins широко використовується в компаніях, де є потреба в автоматичному деплойменті додатків. Система безкоштовна, працює на Windows, macOS та інших Unix-подібних ОС, а також має інтеграцію з Docker та Kubernetes. Jenkins не містить репозиторію з вихідним кодом, а підключається до вже наявних через веб-хуки. Отже, це універсальний інструмент для CI/CD незалежно від вибраного хостингу віддалених репозиторіїв.
Переваги Jenkins:
- безкоштовне використання;
- широкі можливості інтеграції; велика бібліотека плагінів;
- велика та активна спільнота;
- розподіл навантаження на різні машини;
- чудовий варіант для великих проектів.
QOps може ефективно працювати з усіма перерахованими сервісами.
GitHub і GitLab включають можливість встановлення ранерів, які в подальшому будуть виконувати команди з .yml файлу, включеного до репозиторію вихідних кодів при досягненні певної події. Як правило, такою подією є відправлення вихідних кодів (push) або злиття гілок (merge) у віддаленому репозиторії. При цьому синтаксис складання .yml файлів трохи відрізняється, хоча описує ту ж саму сутність поведінки ранера та управління процесом складання програми, тестування та подальшого розгортання. Обидві хостингові системи дозволяють встановлювати свої ранери в оточенні Windows, що поки не доступно для хостингу BitBucket.
Покажемо детальніше використання QOps з вищезгаданими системами. Для GitHub .yml файл є структурованим набором етапів, який складається з послідовних кроків. У наведеному нижче прикладі описується 3 етапи – init-build-reload.
Такий вигляд має цей пайплайн за умов його успішного виконання.
Для GitLab .yml файл являє собою такий самий структурований набір етапів. Відмінностями є інше найменування ключових слів і гнучкіша робота зі змінними. На жаль, розробники не використовують уніфікований формат .yml файлу та взаємна сумісність між ними не забезпечується.
При успішному виконанні вид пайплайну, що складається з тих самих етапів представлений нижче. Тут варто відзначити, що GitLab має більш розвинену інтерактивність. Наприклад, у пайплайні можна налаштувати ручне підтвердження від користувача.
Оскільки QOps зараз працює виключно в середовищі Windows, то автоматичний пайплайн, у разі вибору BitBucket для хостингу вихідних кодів, може бути розроблений при використанні Windows-версії Jenkins. Універсальність останнього та різноманітність плагінів дозволяє пов’язати будь-який віддалений репозиторій через веб-хуки. Структура пайплайна у разі налаштування через інтерфейс самого Jenkins записується у вигляді JSON-об’єкта, і для нашого прикладу містить ті самі 3 етапи – Configuration-Build-Reload.
Результат успішного виконання пайплайну в Jenkins показано нижче. При цьому інтерфейс цікаво зіставляє результати попередніх запусків.
Більше інформації ви знайдете за посиланням