3.1 Вносимо зміни в код
Як я вже казав вище, розробка програмного забезпечення зводиться до внесення невеликих змін в код. Цим процесом займаються мільйони програмістів протягом десятиліть, що призвело до його ретельного відлагодження, стандартизації та формалізації всіма можливими способами.
Для зберігання коду є спеціальна програма – Git. Git – це розподілена система керування версіями. Вона не просто зберігає код, а відслідковує всі зміни в ньому і допомагає програмістам працювати над проектами разом, не заважаючи один одному.
З Git розробники можуть створювати різні версії проекту (гілки), зберігати повну історію змін і навіть повертатися до будь-якого моменту в минулому. Це як машина часу для коду! Git допомагає об'єднувати зміни і розв'язувати конфлікти, тому він став головним інструментом для командної роботи у сучасній розробці.
3.2 Збираємо проект
Перш ніж проект тестувати або завантажувати на сервер, його потрібно зібрати.
Збірка проектів – це процес компіляції вихідного коду проекту в виконувані програми або інші формати, які можна запускати, часто з включенням тестування та розгортання. Це ключовий аспект розробки програмного забезпечення, який забезпечує готовність програми до використання.
Збірка – це не просто компіляція, хоча компіляція часто є частиною процесу збірки. Після завершення збірки у вас можуть виявитися десятки або навіть сотні файлів, які потрібно залити на різні сервери.
Збирачі можуть бути низькорівневі, такі як:
Maven та Gradle – широко використовуються в проектах на Java для керування залежностями і збіркою проектів.
Apache Ant – ще один інструмент для зборки проектів на Java, надає велику гнучкість у написанні сценаріїв збірки.
MSBuild – використовується для збірки проектів, створених з використанням Microsoft Visual Studio.
Make – класичний інструмент збірки, який використовує Makefile для визначення правил збірки, особливо популярний у проектах на C і C++.
Webpack – часто застосовується для збірки JavaScript-програм, керуючи залежностями і модулями.
Gulp і Grunt – інструменти, що допомагають автоматизувати часто виконувані завдання в розробці веб-додатків, такі як мініфікація файлів та компіляція SCSS в CSS.
Також є і високорівневі збирачі. Про них – нижче.
3.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) – методологія, яка передбачає безперервне злиття змін з усіх гілок розробки в основну гілку, а також автоматичне тестування і розгортання цих змін. Це дозволяє швидко виявляти і виправляти помилки, підвищуючи ефективність і швидкість розробки.
Одна з найбільш розповсюджених, хоч і трохи застаріла, CI/CD система – це Jenkins. Якщо ви працюєте в невеликій компанії, то з ймовірністю 80% будуть використовувати саме її.
Jenkins – популярна автоматизована система, що використовується для безперервної інтеграції і доставки (CI/CD). Jenkins дозволяє автоматизувати різні стадії розробки програмного забезпечення, включаючи збірку, тестування та розгортання, що покращує якість коду і прискорює процес розробки.
Якщо ви потрапите в велику компанію, там може бути на вибір ще 5 варіантів:
TeamCity – потужна комерційна система виробництва JetBrains. Пропонує глибоку інтеграцію з різними середовищами розробки і тестування.
GitLab CI – вбудована частина GitLab, забезпечує безперервну інтеграцію і доставку з можливістю налаштування через YAML-файли.
CircleCI – хмарний сервіс CI/CD, підтримує автоматизацію тестування і розгортання для багатьох проектів.
Travis CI – один з перших хмарних CI-сервісів, використовуваний у багатьох відкритих проектах. Добре інтегрується з GitHub.
Bamboo – продукт від Atlassian, тісно інтегрується з іншими інструментами цієї компанії, такими як Jira і Bitbucket.
Знати їх і вміти з ними працювати вам не потрібно – зазвичай в компанії є DevOps-спеціалісти, які й налаштовують всі ці процеси. Вам просто потрібно знати, що вони існують, і розуміти, про що йде мова, якщо в розмові згадується Jenkins, CI/CD або «континиес інтегрейшн».
3.4 Доставляємо проект на сервер
Мало проект написати – він ще повинен опинитися на вашому сервері. Взагалі розгортання (деплой, deploy) проекту на сервер – це процес розміщення і активації веб-додатка на сервері таким чином, щоб воно було доступне користувачам через інтернет.
Цей процес включає в себе перенесення файлів проекту на сервер, налаштування серверного оточення, баз даних, залежностей, а також конфігурацію мережевих налаштувань і безпеки.
А як думаєте, ваш код потрапить на сервер? Хтось його туди заллє? Або, можливо, ви підключитесь по SSH до віддаленого сервера, заллєте туди пару файлів і будете все налаштовувати? Розслабтесь: так більше ніхто не робить. Тепер є Docker.
Docker – це платформа для розробки, доставки і запуску додатків за допомогою контейнерів. Docker спрощує створення, розгортання і виконання додатків, упаковуючи їх разом з усіма залежностями і оточенням в єдиний компактний об'єкт. Це забезпечує послідовність середовища на всіх етапах: від розробки до тестування і продакшена.
Docker дозволяє упакувати ваш проект або проекти в Docker-контейнер. Це щось на кшталт віртуальної машини.
І хоча на будь-якому форумі по Docker вас закидають тапцями, якщо ви назвете його "віртуальною машиною", можна думати про Docker-контейнер саме як про віртуальну машину. Тільки набагато більш легковажну.
По суті, Docker-контейнер є віртуальною «віртуальною машиною». Віртуальні машини включають повну копію операційної системи, ядра ОС, і віртуальне апаратне забезпечення, тоді як Docker-контейнеры розділяють ядро хоста і можуть бути більш легкими і швидкими.
Деплой проекту за допомогою Docker значно спрощує процес, забезпечуючи швидкість і надійність. Проект упаковується в Docker-контейнери, які можна легко переміщувати і запускати на будь-якій системі, що підтримує Docker.
Це позбавляє від проблем, пов'язаних з різницями в серверних середовищах, і дозволяє легко масштабувати додаток, додаючи або видаляючи контейнери в відповідно до навантаження. Всі перейшли на Docker – це дуже зручно і дуже просто.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ