Статьи

Парусный спорт с параллельными морями

Эта статья была спонсирована Codeship . Спасибо за поддержку спонсоров, которые делают возможным использование SitePoint.

заглавие

Ахой, приятель! Похоже, вы один из нас, навигатор по красивым и коварным морям разработки программного обеспечения. Мы из флота SitePoint всегда рады встретиться с другим моряком программного обеспечения. Сегодня у нас есть особое удовольствие для наших попутчиков из соленой глубины. Морские жители в Codeship (Codeshippers!) Создали новый способ навигации по водам Непрерывной Интеграции и Доставки. Тот, который может быть столь же значительным, как любая разработка, так как специализированные юнит-тестирующие парки. Он называется ParallelCI, и он сделает прогулку на ваших кораблях короче и быстрее.

Маленькая история программного обеспечения

Существует большая вероятность того, что вы используете какую-то платформу непрерывной интеграции и доставки. Codeship — это «Непрерывная доставка — просто». Если вы не знаете, что означает «Непрерывная интеграция и доставка», SitePoint и Codeship вам помогут:

Море программного обеспечения постоянно меняется. Такие платформы, как Codeship, позволяют вашему флоту приспосабливаться к изменениям погоды. Прочитайте вышеупомянутые свитки (связанные статьи), чтобы узнать, как Codeship может превратить вашу изможденную команду в мощную армаду. Затем вернитесь сюда, чтобы прочитать об их последних навигационных предложениях.

1_codeship

ParallelCI: покройте территорию тестирования быстрее

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

С ParallelCI, новым предложением от Codeship, теперь тривиально создать новый курс, называемый «конвейером». Каждый конвейер получает одну и ту же настройку, но затем может пройти свой собственный курс (выполнить свои собственные команды). Теперь вы можете легко разбить территорию тестирования на более мелкие маршруты, позволяя каждому трубопроводу проходить через меньшее количество воды. В конечном счете, ваш флот (программное обеспечение) прибывает в пункт назначения (желанные земли Deploymentistan) намного быстрее.

Подготовка к путешествиям

Зарегистрируйтесь в Codeship

Так как мы опытные навигаторы, мы собираемся зарегистрироваться через Github. Если ваши корабли находятся в порту в другом месте, вы можете зарегистрироваться с помощью Bitbucket или обычной электронной почты. Github попросит вас разрешить Codeship доступ к вашим портам (репозиториям), а затем приветствует вас соответствующим морским приветствием:

Выберите флот

Нажмите на гигантскую зеленую кнопку, чтобы создать свой первый проект. Капитан Мо присоединяется к вашей команде, чтобы помочь подготовить вас к вашему первому путешествию.

Нажмите на порт (концентратор репозитория), к которому пристыкован ваш флот, в данном случае, Octocat (есть легенда, рассказывающая о Octocat как о богине программных портов):

Будет отображен список ваших флотов (хранилищ).

В нашем примере сегодня у меня есть только один флот под названием Discourse. Discourse — это большой флот с открытым исходным кодом, работающий на Rails, очень популярном производителе флотов. Я хотел использовать большой парк, в котором много тестов (в Дискурсе более 4000), поэтому я раздвоил их флот.

Подготовьте свой курс

Подпись Mo теперь переносит нас в основную навигационную зону нашей поездки с Codeship:

Перво-наперво, каждый рейс потребует аналогичных команд установки и задач. Как лидер вашей поездки, вы можете ввести любую команду установки, которая вам нужна, и она будет выполняться тампонами Codeship. К счастью для нас, наш флот работает на Rails. У Codeship уже есть общие задачи установки для хорошо известных фреймворков, таких как Rails:

Выбор Rails из выпадающего списка заполняет оба поля: «Modify your Setup Commands» и «Modify your Test Commands». Будучи опытным штурманом, я знаю, что флоту Дискурса нужна немного другая настройка, поэтому я делаю свои модификации:

Настройка является простой частью. Когда мы попадаем в испытательные воды с Codeship и ParallelCI, именно здесь находятся новые территории. Codeship предложил, чтобы мы использовали команду bundle exec rakebundle exec rake spec Тем не менее, это займет тот же, старый путь через тестирование. Дискурс — это зрелый флот, который путешествует через определенные испытательные моря, поэтому мы захотим сделать некоторую настраиваемую навигацию, чтобы поездка была максимально короткой.

Вот испытательные воды, по которым путешествует Дискурс:

Некоторые из этих вод огромны, такие как компоненты , контроллеры и модели . Другие моря легко ориентируются, например, помощники и целостность . Мой навигационный опыт говорит мне, что большие моря получат специальный корабль (трубопровод), в то время как некоторые из менее коварных вод могут быть сгруппированы и покрыты одним кораблем.

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

Во время моего пробного запуска в локальных водах для разработки (моя машина для разработки) мне пришлось переворачивать песочные часы 11 раз (то есть 11 минут) во время испытательного рейса. Навигация с использованием Codeship только с одним кораблем, пробные воды проходили чуть более 5 часов.

Теперь время разбить испытательные моря на трубопроводы. Добавить новый конвейер проще, чем поменять колоду. Просто нажмите на ссылку «+ добавить новый трубопровод», и вам будет предложено назвать конвейер:

14_addpipeline

Щедрые люди в Codeship позволяют нам создавать до 10 конвейеров, но фактическое допустимое количество будет зависеть от уровня вашей учетной записи, когда эта функция выйдет из бета-версии.

Вы можете увидеть корабли, которые я создал здесь:

15_allpipelines

С нашими навигационными маршрутами все спланировано, пришло время поразить открытое море! Путешествие начинается с изменения флота (хранилища). Простое изменение в README (которое я могу редактировать на Github напрямую) сделает это. Поднять якоря!

Теперь, когда у меня есть новое изменение, на странице проекта (нажмите на название проекта в верхнем левом углу Codeship) показывается новое путешествие:

Здесь, в порту, теперь нужно идти пешком и ждать вдовы. Глядя на рейс, мы видим, что каждый из наших кораблей идет по указанному маршруту. Когда каждый корабль возвращается в порт, вы увидите индикатор на приборной панели сборки. Когда они все вернутся, сборка завершена.


19_pipelines2

Когда все корабли вернутся в порт (то есть, они зеленые), наше путешествие подходит к концу:

20_pipelines3

Итак, как мы это сделали? Похоже, мы сократили наше время в море более чем наполовину!

21_result

Это невероятно. С помощью тупого инструмента простого назначения конвейера для каждой папки спецификаций мы удвоили скорость, с которой мы можем добраться до места назначения. HIP! HIP! HORRAY! Ром для всех!

Примечание о развертывании

Как только сборка имеет несколько тестовых конвейеров, она использует несколько виртуальных машин (ВМ) для успешного завершения сборки. В результате развертывание не может произойти, пока все конвейеры тестирования не пройдут успешно. В этом случае интерфейс Codeship будет визуально разделять несколько тестовых виртуальных машин и шаг развертывания. Пример поможет:

22_deploy

Как видно на скриншоте, шаг «Развертывание» запускает фактические команды развертывания после завершения всех тестовых команд. Вы можете увидеть больше об этом в этом видео от Codeship .

Вывод

ParallelCI — это простое, но очень полезное дополнение к предложению Codeship. Хотя навигационные маршруты, которые мы использовали сегодня, были немного тупыми (конвейер для каждой папки спецификаций), я уверен, что вы можете придумать более разумные способы разделения ваших тестов. Например, используя что-то наподобие гема parallel_tests и его параметра —only-group

Независимо от того, как вы это делаете, использование ParallelCI сократит время выполнения вашего теста и даст вам больше времени сосредоточиться на функциях доставки. Как сказал судовой магнат Аристотель Онассис: «Мы должны освободиться от надежды, что море когда-нибудь успокоится. Мы должны научиться плавать при сильном ветре ». Codeship поможет вам научиться делать это.

Codeship предлагает 100 сборок в месяц и 5 частных проектов бесплатно, чтобы начать легко и без риска, так что только скалаг откажется от регистрации. Кроме того, моряки в Codeship постоянно обсуждают новые методы навигации в своем блоге. Счастливого пути, мой морской друг. Отправляйтесь в Codeship и попробуйте ParallelCI прямо сейчас .