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 позволяет автоматизировать различные стадии разработки программного обеспечения, включая сборку, тестирование и развертывание, что улучшает качество кода и ускоряет процесс разработки.
Если вы попадете в крупную компанию, там может быть на выбор еще 5 вариантов:
- 🚦 TeamCity – мощная коммерческая система производства JetBrains. Предлагает глубокую интеграцию с различными средами разработки и тестирования.
- 📝 GitLab CI – встроенная часть GitLab, обеспечивает непрерывную интеграцию и доставку с возможностью настройки посредством YAML-файлов.
- ☁️ CircleCI – облачный сервис CI/CD, поддерживает автоматизацию тестирования и развертывания для множества проектов.
- 🦑 Travis CI – один из первых облачных CI-сервисов, используемый во множестве открытых проектов. Хорошо интегрируется с GitHub.
- 🎍 Bamboo – продукт от Atlassian, тесно интегрируется с другими инструментами этой компании, такими как Jira и Bitbucket.
Знать их и уметь с ними работать вам не нужно – обычно в компании есть DevOps-специалисты, которые и настраивает все эти процессы. Вам просто нужно знать, что они существуют, и понимать, о чем идет речь, если в разговоре упоминается Jenkins, CI/CD или «континиес интегрейшн».
4. Доставляем проект на сервер
Мало проект написать – он еще должен оказаться на вашем сервере. Вообще развертывание (деплой, deploy) проекта на сервер – это процесс размещения и активации веб-приложения на сервере таким образом, чтобы оно было доступно пользователям через интернет 🚚.
Этот процесс включает в себя перенос файлов проекта на сервер, настройку серверного окружения, баз данных, зависимостей, а также конфигурацию сетевых настроек и безопасности 😅.
А как думаете, ваш код попадет на сервер? Кто-нибудь его туда зальет? Или, быть может, вы подключитесь по SSH к удаленному серверу, зальете туда пару файлов и будете все настраивать? Расслабьтесь: так больше никто не делает. Теперь есть Docker.
🐳 Docker – это платформа для разработки, доставки и запуска приложений с помощью контейнеров. Docker упрощает создание, развертывание и выполнение приложений, упаковывая их вместе со всеми зависимостями и окружением в единый компактный объект. Это обеспечивает консистентность среды на всех этапах: от разработки до тестирования и продакшена.
Docker позволяет упаковать ваш проект или проекты в Docker-контейнер. Это что-то типа виртуальной машины.
И хотя на любом форуме по Docker вас закидают тапками, если вы назовёте его "виртуальной машиной", можно думать о Docker-контейнере именно как о виртуальной машине. Только гораздо более легковесной.
По сути, Docker-контейнер есть виртуальная «виртуальная машина». Виртуальные машины включают полную копию операционной системы, ядра ОС, и виртуальное аппаратное обеспечение, в то время как Docker-контейнеры разделяют ядро хоста и могут быть более легкими и быстрыми ⚡.
Деплой проекта с помощью Docker сильно упрощает процесс, обеспечивая быстроту и надежность. Проект упаковывается в Docker-контейнеры, которые можно легко перемещать и запускать на любой системе, поддерживающей Docker 🚢.
Это избавляет от проблем, связанных с различиями в серверных средах, и позволяет легко масштабировать приложение, добавляя или удаляя контейнеры в соответствии с нагрузкой. Все перешли на Docker – это очень удобно и очень просто.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ