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 – это очень удобно и очень просто.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ