Непрерывная интеграция — это метод контроля качества программного обеспечения, который проверяет целостность кода всякий раз, когда вносятся небольшие изменения, а не ожидает завершения всего кода перед его тестированием и отладкой.
CI требует контроля версий, автоматического модульного тестирования и постоянной сборки пакетов. В принципе, автоматизированная часть цикла может быть выполнена с помощью заданий cron, которые запускают такие программы, как xunit (тестер) и make (сборщик). Однако в последние несколько лет появились более удобные и находчивые инструменты, такие как Jenkins, который объединяет задачи автоматизации и контроля в единую систему.
То, что делает Дженкинс, не трудно понять, если вы знаете, почему это происходит. В этой серии из двух частей я представлю общий обзор проблем программирования, которые может решить CI, покажу, как этого можно достичь с помощью специализированного программного обеспечения, и объясню, как можно минимально использовать Jenkins для периодического запуска тестирования и создание приложений PHP (веб), ведение учета того, где интеграция прошла успешно или не удалось, и поддержание папки «output» в актуальном состоянии с последними файлами, которые требуются приложению, готовыми для загрузки на сервер.
Кстати, мне не нужно заботиться о том, чтобы сделать читателя экспертом в Jenkins, потому что им так легко пользоваться, что, как только его основная цель понята, сложные ресурсы следуют естественным образом.
Большая картина
Реализуя программу досрочного выхода на пенсию, The One Big Worldwide Corporation, Inc. предложила своим сотрудникам предложения о том, как использовать свое новое качественное время. Одним из них было программирование для Интернета, будь то для развлечения, общественных работ или для собственного малого бизнеса. Несколько человек проявили интерес, и отдел обучения купил им серию очень хороших книг по всем аспектам веб-дизайна и разработки, опубликованных австралийской компанией, которая также поддерживает некоторые из лучших в мире веб-сайтов по этой теме.
Среди тех, кто начал заниматься PHP-программированием для Интернета, были три бывших внешнеторговых оператора, которые, работая в прошлом часто, решили создать онлайновую сеть бывших сотрудников: Берта, которая живет в Буэнос-Айресе, Аргентина, Алисия , который проживает в Иокогаме, Япония, и Мива из Бонна, Германия. Кроме того, Гвидо, бывший специалист по персоналу в Турине, Италия, решил создать свой собственный бизнес веб-разработки и хостинга.
Чтобы начать работу с сетевым приложением, Берта предложила написать сценарий поиска в базе данных, в то время как Алисия вызвалась разработать HTML-интерфейс, а Miwa решила атаковать код для добавления / редактирования / удаления записей. Они договорились встречаться онлайн раз в неделю, чтобы проверить свои результаты.
Первые пару недель все шло гладко, но вскоре после того, как возникли проблемы, Берта решила, что именование переменных в $camelCaseNaming
не очень хорошо, и изменила все на $underscore_separated_names
, Алисия переименовала некоторые поля формы интерфейса, а Мива изменил способ работы базы данных даты. Когда они собрались вместе и протестировали приложение, ошибки начали появляться как кукуруза на One and Only Famous Popcorn Machine от One Big Worldwide Corporation.
Тем временем в Италии Гвидо с трудом следил за файлами разработки, разбросанными по всему его жесткому диску, некоторые из которых были более новыми и более старыми, чем версии на серверах его клиентов, поэтому устранение проблемы на одном веб-сайте неизменно приводило к поломке другого.
Дамы и Гвидо были в том, что иногда называют «адом интеграции», из-за которого многие молятся святому Исидору, которого некоторые считают покровителем Интернета, или непрерывной интеграции.
Непрерывная интеграция (CI) — это метод разработки, при котором любое изменение файла, независимо от его размера, должно быть документировано, протестировано и отправлено в центральное хранилище с управлением версиями, а пакеты собираются в плановом порядке, исключая все, что есть. не требуется для запуска приложения.
Непрерывная интеграция помогает убедиться, что все работают над последней версией кода, что никакие необъявленные изменения в файле A не ставят под угрозу разработку файла B, что в любое время требуется не более нескольких исправлений, чтобы вернуть B к работе с A и что пакеты автономны, аккуратно организованы и не содержат ненужных промежуточных файлов.
Контроль версий
Прочитав замечательную статью Шона Хадгстона « Введение в Git» , которую я рекомендую тем, кому еще нужно познакомиться с этим потрясающим инструментом (я имею в виду, сейчас!), Дамы и Гвидо решили использовать Git-менеджер Линуса Торвальдса, чтобы попытаться получить Весь их код организован в одном месте.
Работая в одиночку, Гвидо создал репозиторий на своем настольном компьютере, создав зонтичный каталог ( /www
) с подпапкой для каждого проекта, например /www/formaggeria_centrale
и /www/assicurazione_chiapetta
.
Леди нуждались в удаленном репозитории, к которому каждый мог бы получить доступ, и они выбрали учетную запись GitHub, создав проект, который они назвали «прежний_мплой», и согласились, что каждый может git add
файл, как только его создание или редактирование будет завершено.
Модульное тестирование
Фундаментальным шагом в тестировании программного обеспечения является постоянная проверка того, работает ли новый код так, как это должно быть, прежде чем помещать его в репозиторий Git. Это называется модульным тестированием , и оно может быть выполнено в PHP с помощью фреймворка PHPUnit Себастьяна Бергмана.