Блог о программировании

Непрерывная интеграция и непрерывная доставка PHP-кода

Категория: DevOps
 22 мая 2017 г. 23:01

Ритм разработки программного обеспечения из года в год все ускоряется. Если раньше было возможным применять водопадную модель разработки ПО, когда программа от стадии задумки до стадии релиза проживала в разработке и тестировании многие годы, прошли. Сейчас это совершенно неприемлемо. Даже более совершенная итеративная модель разработки, которая предполагает достаточно частые релизы 1-4 раза в месяц, и то уже не отвечает потребностям рынка. Современный ритм разработки программ требует, чтобы фичи выкатывались в релиз как можно быстрее после разработки. А ведь фичу необходимо еще и полноценно протестировать. Именно как ответ на данные вызовы появились такие практики как непрерывная интеграция и непрерывная доствка программного кода в арсенале современных команд разработки.

Непрерывная интеграция (англ. Continuous Integration, CI) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем. Обычно сборка проекта осуществляется после внесения изменения разработчиком в код, либо через определенные промежутки времени, например, каждые 20 минут. В любом случае, за определенной сборкой закрепляется определенный коммит в репозитории кода.

Касательно PHP-кода термин "сборка" подразумевает прохождение текущим кодом какого-то набора важных процедур, позволяющих составить представление о качестве кода. Здесь главную роль играет прохождение всякого рода автоматических тестов. Тесты могут выявить уже известные проблемы в системе. В случае, если после очередного коммита в коде всплывает какая-то ошибка, то разработчики тутже об этом знают - вот, где вся прелесть непрерывной интеграции. Соответственно, чем больше тестов написано на известные проблемы, тем спокойнее писать новый код зная, что если что-то пошло не так - ты обязательно об этом узнаешь и все исправишь.

непрерывная интеграция

Каждый кружок - это сборка. Код, привязанный к определенному коммиту в системе контроля версий

Дополнительно могут быть подключены статические анализаторы кода. Анализаторы могут быть самыми разными: одни подсчитывают количество пакетов в проекте, классов, методов и строк кода. Другие же выполняют более сложный анализ, например, говорят, что тот или иной метод слишком мудрено написан, и его следует переписать. Третьи формируют диаграммы зависимостей пакетов друг от друга, диаграммы классов. Четвертые следят за тем, чтобы код был написан по какому-либо стандарту кодирования. В общем, статических анализаторов кода много. Таким образом, если код покрыт множеством тестов, воспроизводящих ту или иную проблему, а также проанализирован множеством анализаторов кода, то касательно сборки можно ответить на следущие вопросы:

  • нет ли в коде известных проблем?
  • есть ли узкие места в коде, где в дальнейшем может понадобиться рефакторинг?
  • правильно ли оформлен код?
  • есть ли в проекте неиспользуемый код?
  • насколько качественен код: много ли копипасты, жирные ли классы или не слишком ли методы запутаны?

В случае, если все автоматические тесты были успешно пройдены, и у статических анализаторов нет претензий к коду - сборка считается успешной, иначе - нет. Под успешной сборкой подразумевается, что она теоретически может быть использована в дальнейшем - развернута в тестовой и/или в рабочей среде. Следовательно, чем лучше код покрыт автоматическими тестами, и чем грамотнее настроены анализаторы кода, тем выше может быть достигнут процесс автоматизации.

непрерывная интеграция 2

Зеленые кружки - успешные сборки, красные - нет

Таким образом, по результатам работы непрерывной интеграции всегда есть множество сборок проекта на определенные моменты времени, которые успешно прошли автоматическое тестирование и статический анализ кода. Сформирована база для непрерывной доставки.

Непрерывная доставка (англ. Continuous Delivery, CD) – это расширение практики непрерывной интеграции за счет развертывания кода успешной сборки в тестовой и/или рабочей среде. Даже в случае, если после развертывания кода что-то пошло не так, всегда есть возможность откатить систему к предыдущему состоянию - все данные есть в системе непрерывной интеграции.

Наиболее популярные бесплатные инструменты для данных целей:

  • jenkins
  • travis ci
  • buildbot
  • phpci
Теги:  PHP  ci  cd  php7 

Поделиться статьей

Оставить комментарий