1. Вносимо зміни у код
Як ми вже говорили раніше, розробка програмного забезпечення зводиться до внесення невеликих змін у код. Цим процесом займалися й займаються мільйони програмістів упродовж десятиліть, тож його ретельно налагодили, стандартизували та формалізували всіма можливими способами.
Для зберігання коду є спеціальна програма — Git. Git — це розподілена система керування версіями. Вона не просто зберігає код, а відстежує всі зміни у ньому та допомагає програмістам працювати над проєктами разом, не заважаючи одне одному 🤝.
За допомогою Git розробники можуть створювати різні версії проєкту (гілки), зберігати повну історію змін і навіть повертатися до будь-якого моменту в минулому. Це як машина часу для коду! Git допомагає об’єднувати зміни та розв’язувати конфлікти, тому він став головним інструментом для командної роботи в сучасній розробці. 👩💻
2. Збираємо проєкт
Перш ніж тестувати проєкт або завантажувати його на сервер, його слід зібрати.
🏗️ Збірка проєктів — це процес компіляції вихідного коду проєкту у виконувані програми або інші формати, які можна запускати, часто із запуском тестів і розгортанням. Це ключовий аспект розробки програмного забезпечення, що забезпечує готовність програми до використання.
Збірка — це не просто компіляція, хоча компіляція часто є частиною процесу збірки. Після завершення збірки у вас можуть з’явитися десятки або навіть сотні файлів, які треба завантажити на різні сервери.
Існують низькорівневі інструменти збірки, зокрема:
- ☕ Maven і Gradle — широко використовуються в проєктах на Java для керування залежностями та збіркою проєктів.
- 🐜 Apache Ant — ще один інструмент для збірки проєктів на Java, надає велику гнучкість у написанні сценаріїв збірки.
- 🖥️ MSBuild — використовується для збірки проєктів, створених у середовищі Microsoft Visual Studio.
- ⚙️ Make — класичний інструмент збірки, використовує Makefile для визначення правил збірки, особливо популярний у проєктах мовами C та C++.
- 🌐 Webpack — часто застосовується для збірки JavaScript‑застосунків, керуючи залежностями та модулями.
- 📜 Gulp і Grunt — інструменти, що допомагають автоматизувати часто виконувані завдання у розробці вебзастосунків, зокрема мінімізацію файлів і компіляцію SCSS у CSS.
Є й високорівневі інструменти збірки. Про них — нижче.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) — методологія, що передбачає безперервне злиття змін з усіх гілок розробки в основну гілку, а також автоматичне тестування й розгортання цих змін. Це дає змогу швидко виявляти та виправляти помилки, підвищуючи ефективність і швидкість розробки.
Одна з найпоширеніших, хоч і трохи застарілих, CI/CD‑систем — це Jenkins. Якщо ви працюєте у невеликій компанії, то з імовірністю 80 % використовуватимуть саме її.
🤖 Jenkins — популярна автоматизована система, яку використовують для безперервної інтеграції й доставки (CI/CD). Jenkins дає змогу автоматизувати різні стадії розробки програмного забезпечення, включно зі збіркою, тестуванням і розгортанням, що покращує якість коду та пришвидшує процес розробки.
Якщо ви працюватимете у великій компанії, там можете зустріти ще п’ять варіантів:
- 🚦 TeamCity — потужна комерційна система від JetBrains. Пропонує глибоку інтеграцію з різними середовищами розробки та тестування.
- 📝 GitLab CI — вбудована частина GitLab, забезпечує безперервну інтеграцію й доставку з можливістю налаштування через YAML‑файли.
- ☁️ CircleCI — хмарний сервіс CI/CD, що підтримує автоматизацію тестування та розгортання для багатьох проєктів.
- 🦑 Travis CI — один із перших хмарних CI‑сервісів, використовується у багатьох відкритих проєктах. Добре інтегрується з GitHub.
- 🎍 Bamboo — продукт від Atlassian, тісно інтегрується з іншими інструментами цієї компанії, такими як Jira та Bitbucket.
Знати їх і вміти з ними працювати вам не потрібно — зазвичай у компанії є DevOps‑фахівці, які й налаштовують усі ці процеси. Вам достатньо знати, що вони існують, і розуміти, про що йдеться, якщо в розмові згадується Jenkins, CI/CD або «безперервна інтеграція».
4. Доставляємо проєкт на сервер
Недостатньо просто написати проєкт — він ще має опинитися на вашому сервері. Загалом, розгортання (deployment) проєкту на сервері — це процес розміщення та активації вебзастосунку на сервері так, щоб він був доступний користувачам через інтернет 🚚.
Цей процес охоплює перенесення файлів проєкту на сервер, налаштування серверного середовища, баз даних, залежностей, а також налаштування мережі й безпеки 😅.
Як ви думаєте, як ваш код потрапить на сервер? Хтось завантажить його туди? Або, можливо, ви під’єднаєтеся до віддаленого сервера через SSH, закинете туди кілька файлів і все налаштовуватимете вручну? Розслабтеся: так уже ніхто не робить. Тепер є Docker.
🐳 Docker — це платформа для розробки, доставки та запуску застосунків за допомогою контейнерів. Docker спрощує створення, розгортання й виконання застосунків, упаковуючи їх разом із усіма залежностями та середовищем в один компактний об’єкт. Це забезпечує узгодженість середовища на всіх етапах: від розробки до тестування і продакшену.
Docker дає змогу упакувати ваш проєкт або кілька проєктів у Docker‑контейнер. Це щось на кшталт віртуальної машини.
І хоча на будь-якому форумі про Docker вас насварять, якщо ви назвете його «віртуальною машиною», мислити про Docker‑контейнер саме як про віртуальну машину — цілком зручно. Тільки набагато легшу.
По суті, Docker‑контейнер — це «віртуальна машина» легшого класу. Віртуальні машини містять повну копію операційної системи, ядро ОС і віртуальне апаратне забезпечення, а Docker‑контейнери спільно використовують ядро хоста та можуть бути легшими і швидшими ⚡.
Розгортання проєкту за допомогою Docker суттєво спрощує процес, забезпечуючи швидкість і надійність. Проєкт упаковується в Docker‑контейнери, які можна легко переносити та запускати на будь-якій системі, що підтримує Docker 🚢.
Це позбавляє від проблем, пов’язаних із відмінностями в серверних середовищах, і дає змогу легко масштабувати застосунок, додаючи або видаляючи контейнери залежно від навантаження. Усі перейшли на Docker — це дуже зручно й дуже просто.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ