Статьи

Codeship: конвейеры развертывания и ParallelCI для более быстрых результатов

Это вторая часть спонсируемой серии по Codeship , безопасной, облачной непрерывной интеграции и сервису доставки. Если вы пропустили первую часть, вы можете вернуться и прочитать ее здесь .


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

Сначала я покажу, как использовать Codeship для развертывания в AWS CodeDeploy. Затем мы рассмотрим новый ParallelCI Codeship , который ускоряет ваши тесты и сборки, делегируя задачи параллельно различным виртуальным машинам. Я также представлю API Codeship, полезно, если вы хотите более автоматизированный контроль над сервисами Codeship.

Давайте начнем с обзора того, что делает Codeship.

С Codeship вы настраиваете службу для создания, тестирования и развертывания приложения из менеджера исходного кода на промежуточных и производственных платформах по вашему выбору. Сервис предлагает множество мощных опций настройки. В настоящее время Codeship интегрирован с популярными менеджерами исходного кода GitHub и Bitbucket. Он поддерживает различные языки программирования (Ruby on Rails, Node.js, PHP, Java, Go, Dart и т. Д.) И платформы развертывания (Amazon Web Services, Heroku, Google App Engine и т. Д.).

Практика непрерывной интеграции включает в себя повторное автоматическое тестирование и объединение кода с уведомлениями, чтобы предупредить разработчиков о проблемах в их коде в режиме реального времени. Codeship сочетает это с практикой непрерывной доставки , которая обеспечивает регулярное развертывание кода после того, как изменения прошли автоматические тесты.

По сути, когда вы отправляете свой код на GitHub, Codeship перестраивает ваше приложение на своих защищенных серверах и запускает ваши автоматизированные тесты. Если тесты не пройдены, он уведомляет вашу команду разработчиков по электронной почте или через интеграцию с популярными сервисами, такими как Slack, HipChat и т. Д. Если тесты пройдены, Codeship следует вашему определенному конвейеру для перемещения кода на промежуточные или производственные серверы, как указано.

Совместимость с вашими разработчиками для ваших клиентов

Работа с такой службой, как Codeship, может минимизировать последствия ошибок, ускорить их обнаружение и сделать вашу команду более удобной и опытной в выпуске регулярных пошаговых улучшений для вашей платформы — надеюсь, улучшая вашу отзывчивость к вашим клиентам и вашему рынку.

Codeship помогает вашей команде писать и развертывать свой код с большей уверенностью.

Недавно Codeship анонсировала новую захватывающую функцию для ускорения ваших тестов. Это называется ParallelCI.

ParallelCI позволяет вам разделить ваши тестовые команды между несколькими виртуальными машинами сборки (VM), чтобы ускорить время сборки. Выполняя параллельные тесты, Codeship повышает производительность вашей команды с помощью более быстрых сборок. Вы можете использовать ParallelCI для настройки вашего проекта с десятью параллельными конвейерами, чтобы получить 10-кратное увеличение скорости для вашего набора тестов.

CodeShip Diagram из ParallelCI Parallel Test Suite в действии

Вы можете прочитать тематические исследования от клиентов Codeship Bannerman и LendingCrowd , которые сократили время тестирования на 30% и 50% соответственно.

Пример использования CodeShip по кредитованию на ParallelCI - ускоренное тестирование

Напоминаю, что я участвую в обсуждениях ниже. Если у вас есть вопрос или предложение по теме, пожалуйста, оставьте комментарий ниже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую.

Теперь давайте начнем исследовать возможности развертывания Codeship более подробно.

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

Пример кода развертывания конвейеров

Кстати, Codeship также предлагает эту бесплатную и очень информативную электронную книгу: Эффективность в рабочих процессах разработки . Вы можете проверить это вместе с Codeship Blog , который держит вас в курсе новых разработок и лучших практик.

Я предполагаю, что вы следовали нашему первому уроку, зарегистрировались и начали использовать Codeship.

Если вы посетите журнал сборки вашего проекта, вы увидите список последних результатов. Нажмите на зеленую кнопку успеха .

Codeship Получить журналы строительства Green Build Project

Откроется информация о результатах сборки и меню боковой панели параметров сборки .

Результаты сборки Codeship и опции сборки

Вот меню параметров сборки. Нажмите на обзор настроек теста :

Меню параметров Codeship Build

Здесь вы увидите меню боковой панели « Параметры проекта» слева, где мы найдем нужные нам варианты развертывания.

Общие настройки Codeship

Вот подробный вид меню настроек проекта. Нажмите на развертывание :

Меню настроек Codeship Project

Codeship обеспечивает готовую интеграцию развертывания со многими популярными хостинговыми решениями, включая Google AppEngine, Amazon Web Services, CodeDeploy, Heroku, Engine Yard, Nodejitsu и многие другие. Codeship является официальным партнером AWS и CodeDeploy .

Codeship Настройте ваши развертывания

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

Документация по непрерывному развертыванию Codeship

Я собираюсь показать вам два примера. Сначала я разверну свою раннюю сборку Yii2 Framework на основе PHP в AWS с CodeDeploy. Затем я соберу проект Ruby Discourse, используя ParallelCI, чтобы ускорить время сборки.

В первой части я использовал Codeship для запуска автоматических тестов на развилке основанной на PHP платформы Yii2 Framework . Теперь давайте настроим Codeship для развертывания моего проекта на сервере AWS с использованием AWS CodeDeploy .

Сначала давайте пройдемся по Amazon AWS CodeDeploy:

Я предоставлю базовое руководство по AWS CodeDeploy, но моя цель не в том, чтобы подробно описать его здесь. Вместо этого я хочу помочь вам настроить соединение Codeship с AWS CodeDeploy.

Сначала посетите страницу « Начало работы с AWS CodeDeploy» и выберите пользовательское развертывание :

Codeship AWS Code Deploy Application Wizard

Затем создайте новое приложение . Я уже создал экземпляр EC2 и отметил его CodeDeployDemo .

Codeship AWS Code Deploy Создание нового приложения

Выберите конфигурацию развертывания . Я уже настроил сервисную роль:

Конфигурация развертывания Codeship AWS Code Deploy

Теперь, когда ваше приложение AWS CodeDeploy настроено, вам нужно настроить группу Deploy для своего экземпляра.

Codeship AWS Code Deployment Group

Это будет отличаться в зависимости от вашего приложения и местоположения корзины S3:

Codeship AWS Code Deploy Как развернуть ваше приложение

Тогда, давайте вернемся к Codeship. Введите свой проект и нажмите « Настройки проекта» в правом верхнем углу. Затем нажмите Развертывание :

Настройки проекта Codeship для развертывания

Затем нажмите кнопку CodeDeploy :

Codeship Настройте ваше развертывание

Заполните параметры свойства AWS Code Deployment с помощью своих ключей доступа Amazon, секретного ключа, а также имени приложения CodeDeploy и группы развертывания. Также укажите ваш S3 Bucket:

Codeship AWS Code Deploy Deployment

Теперь вы можете просмотреть документацию Codeship для использования AWS CodeDeploy и сопутствующего сообщения в блоге .

В следующий раз, когда вы отправите коммит, Codeship создаст ваше приложение, протестирует его и запустит операцию AWS CodeDeploy.

Codeship также предлагает несколько видеогидов на своем канале Vimeo, которые могут вас заинтересовать. Например:

  • Развертывание Ruby on Rails в Heroku
  • Развертывание приложения Node.js в Nodejitsu
  • Развертывание приложения Django в Google AppEngine

Здесь они в порядке. Затем мы углубимся в использование ParallelCI для ускорения наших тестов.

Вот краткое руководство по развертыванию приложения Ruby on Rails из GitHub в Heroku. Ниже приведено видео:

Вот краткое руководство о том, как развернуть приложение Node.js из GitHub в Nodejitsu , и видео ниже:

Вот краткое руководство о том, как настроить непрерывную интеграцию и непрерывное развертывание для приложения Django из GitHub в App Engine , и видео ниже:

Я собираюсь создать форк популярной дискуссионной платформы сообщества Discourse для Ruby on Rails. Затем я добавлю проект в Codeship для моей раздвоенной копии Discourse.

Codeship Добавьте свой проект SCM - Дискурс

Нажмите на Environment и настройте переменные окружения для нашего проекта Rails:

Codeship Настройте переменные среды

Затем мы будем использовать следующие команды установки для настройки инструкций по сборке:

1
2
bundle install —without development —deployment —retry=3 —jobs=3
bundle exec rake db:migrate
Команды настройки сборки проекта Codeship

Затем я внесу пример изменения в файл ReadMe, чтобы начать сборку Codeship.

Codeship Push and Build Дискурс

Вот результаты успешной сборки:

Codeship Push and Build Дискурс Успех

Теперь давайте добавим следующие тесты в один конвейер.

1
2
3
bundle exec rake qunit:test
bundle exec rake plugin:spec
bundle exec rspec —profile
Codeship Push and Build Discourse Single Pipeline

В следующий раз, когда мы сделаем коммит, Codeship создаст код и запустит тест. С одним конвейером это занимает почти десять минут.

Единый трубопровод Codeship завершается за десять минут

Теперь перейдем к ParallelCI.

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

Вот видео-пошаговое руководство с другой кодовой базой о том, как мы настроим ParallelCI для ускорения этих тестов:

Для моего первого тестового конвейера я собираюсь запустить следующие тесты:

1
2
3
bundle exec rake qunit:test
bundle exec rake plugin:spec
bundle exec rspec spec/controllers spec/models —profile
Codeship Two Pipelines - Настройка первого

Для моего второго тестового конвейера я выполню следующее:

1
2
rm -fr spec/controllers spec/models
bundle exec rspec —profile
Кодирование двух трубопроводов - настройка второго

Затем я добавлю новый коммит, и вы увидите, что ParallelCI работает ниже с отдельным журналом состояния каждого конвейера:

Codeship Two Pipelines Сборка и тестирование

Всего через 7 минут 26 секунд двухпроводная сборка завершается:

Это примерная экономия времени почти на 30%. Это хороший пример того, как Codeship ParallelC позволяет сэкономить время вашей команды при выполнении более сложных последовательностей сборки и тестирования. Также имейте в виду, что Codeship допускает до 20 параллельных тестовых конвейеров — прирост скорости здесь может быть экспоненциальным.

Помните, что если у вас настроено развертывание для определенной ветви и каждый тестовый конвейер сообщает об успешном запуске, ваш конвейер развертывания будет запущен. Вам не нужно ничего менять, если вы используете одно из интегрированных развертываний Codeship, например Heroku, AWS CodeDeploy, Google App Engine и т. Д.

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

Есть еще одна вещь, которую стоит упомянуть, Codeship API.

Если вам нужен еще больший контроль над Codeship для полного написания сценариев и автоматизации ваших служб непрерывной доставки, Codeship предлагает API :

Сценарий документирования API Codeship и автоматизация Codeship

Вы можете настроить сборки вашего проекта и перезапустить их при необходимости.

Я хотел бы обобщить то, что мы узнали о Codeship:

  • Codeship — это служба непрерывной доставки, ориентированная на скорость, надежность и простоту.
  • Он автоматически тестирует и развертывает ваши приложения.
  • Он интегрирован со всеми соответствующими системами управления исходным кодом, например, GitHub и Bitbucket.
  • Он поддерживает различные языки программирования, например Ruby on Rails, Node.js, PHP, Python, Go, Dart и т. Д.
  • Он хорошо интегрирован с различными популярными решениями для развертывания, такими как Heroku, AWS CodeDeploy, Google App Engine и т. Д.
  • Он предоставляет уведомления по электронной почте и в чате, таких как Slack, HipChat и т. Д.
  • Вы получаете 100 сборок в месяц и 5 частных проектов бесплатно, чтобы начать легко и без риска. Проекты с открытым исходным кодом могут использовать Codeship бесплатно. Образовательные проекты получают скидку 50%.
  • Новейшая функция Codeship ParallelCI позволяет запускать сборки параллельно, что значительно ускоряет выполнение тестового набора.
  • Если вы хотите автоматизировать Codeship, вы можете использовать его API.

Codeship может обеспечить ценность для небольших групп с их бесплатным или базовым планом, а также для очень крупных компаний, которым требуется до 20 параллельных тестовых конвейеров, с их планом Enterprise. См. Страницу цен Codeship для получения дополнительной информации. Есть даже бесплатная 14-дневная пробная версия для каждого, чтобы опробовать свою конфигурацию 20 параллельных конвейеров .

Я надеюсь, что вы попробуете Codeship. Поделитесь своим опытом в комментариях. Как всегда, пожалуйста, не стесняйтесь оставлять свои вопросы тоже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую. Посетите мою страницу инструктора Tuts +, чтобы увидеть другие уроки, которые я написал.

SaveSaveSaveSave