Статьи

Как настроить непрерывное развертывание с Ninefold

Спонсором этого поста был Ninefold . Спасибо за поддержку спонсоров, которые делают возможным SitePoint!

Я могу вспомнить тот день, девять лет назад, когда развертывание было ручным процессом. Иногда на развертывание даже самых простых сайтов уходило 99 минут. По шкале утомления и разочарования, развертывание было сплошной «9».

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

Непрерывное развертывание — это практика автоматического развертывания каждого изменения кода, которое передает автоматизированные тесты в производство.

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

CDep не для слабых или слабо покрытых тестами. Те, кто решается попробовать CDep, уверены, что автоматизированные тесты охватывают всю функциональность приложения. Это не маленький подвиг. Я бы сказал, что 99,999% проектов, вероятно, не имеют тестового покрытия для запуска CDep. Но для тех, кто прилагает усилия и обладает дисциплиной, их награды велики: уверенность в том, что изменения не вызовут регрессии и что вы не потеряете время при ручном развертывании. Плоды CDep труда являются самыми сладкими на лозе.

Растущее повсеместное распространение CDep напрямую связано с ростом числа платформ как услуга (PaaS). Есть много PaaS, и сегодня мы собираемся проверить Ninefold.

Девятикратный сайт

Ninefold — это PaaS, который специализируется на размещении приложений Rails. Наряду с простотой развертывания, которая поставляется с большинством предложений PaaS, Ninefold также предлагает множество плагинов для таких вещей, как Redis, PostgreSQL, SendGrid, New Relic, Memcached и других. Критическим отличием для Ninefold является возможность добавления необработанных виртуальных серверов. Если нет плагина для программного обеспечения, которое вы хотите использовать, просто раскрутите виртуальную машину и разместите ее самостоятельно.

Ninefold также интегрируется с различными платформами непрерывной интеграции, такими как Codeship , TravisCI и CircleCI .

Моя демонстрация сегодня покажет вам, как использовать Ninefold и Codeship для простого создания рабочего процесса CDep для приложения Rails.

NineThings

Наше приложение представляет собой простое приложение Rails, которое обслуживает критически важные потребности тех, кто хочет перечислить вещи, которые кратны 9. Пользователи могут добавлять вещь и ее девять крат в растущий список NineThings. Это / вставить текущее большое социальное приложение здесь / -killer. Вот как это выглядит:

Наше приложение NineThings

Разве это не красиво? Я не буду вдаваться в подробности о том, как это делается, просто потому, что это приложение Rails «просто используй генератор» с добавленным камнем foundation-rails чтобы сделать его немного чище. Последовательность NineThings модель-представление-контроллер была сгенерирована с использованием генератора scaffold . О, и я использую PostgreSQL. Ничего особенного в этой настройке.

Источник находится в этом репозитории Github , который я буду использовать при регистрации приложения в Ninefold. Не стесняйтесь раскошелиться на приложение (или выбрать собственное приложение Rails) и следовать за ним.

Записаться на Ninefold

Чтобы использовать Ninefold в качестве нашей платформы PaaS, вам необходимо зарегистрироваться. Перейдите на сайт Ninefold и заполните форму регистрации. Отправив форму, вы попадаете на панель инструментов с приветственным сообщением.

NineFold добро пожаловать

Закройте окно приветствия и нажмите «Развернуть новое приложение». Первая часть информации, которую требует Ninefold, — это местоположение вашего хранилища исходного кода. В моем случае это Github-репозиторий, о котором я упоминал ранее. Итак, я нажимаю «Войти через Github», утверждаю, что Ninefold хочет сделать, и список моих организаций и репозиториев Github отображается на панели инструментов. Это классно.

Repos

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

Окружающая обстановка

Ninefold предлагает различные варианты инфраструктуры в зависимости от потребностей вашего приложения в масштабируемости. Для этого приложения я просто тестирую и хочу сохранить его дешевым / бесплатным. Я могу сделать это с помощью опции 1,5 ГБ для веб-сервера, самой маленькой базы данных PostgreSQL, и сказать «Нет» фоновым работникам (хотя Ninefold не взимает за них плату). Это показывает ежемесячную стоимость $ 46,91, и Ninefold откажется от первых 50 $ моего счета в рамках текущей рекламной акции , что идеально. Следующий шаг. Пожалуйста.

Программный стек

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

развертывание

Развертывание занимает несколько минут, так что сейчас самое время представить Брута, бритого яка Ninefold . Brutus поставляется с интерфейсом командной строки Ninefold, который можно установить вместе с джемом в девять раз ( gem install ninefold джем в gem install ninefold или добавить его в свой гемфайл и bundle ). Откройте терминал, перейдите в каталог проекта приложения Rails и установите гем.

CLI основано на ninefold команде, разумно. Набрав в ninefold вы получите представление о доступных опциях:

CLI

Первое, что нужно сделать, это войти в систему. Введите ninefold signin и введите свои данные пользователя Ninefold. Brutus убежит и зарегистрирует вас. После входа в систему CLI позволяет вам взаимодействовать с вашими приложениями Ninefold с помощью команды ninefold app ninefold. ninefold app list перечислено мое одно приложение для девятки. (Кстати: есть также ninefold brutus команды, в которых вы можете заставить нашего любимого яка жевать и говорить что-то. Попробуйте, это весело.)

Я не буду проходить через все команды CLI, поскольку они довольно очевидны. Я выделю ninefold app redeploy_command , в котором перечислены команды CLI для повторного развертывания приложения. В моем случае:

 AUTH_TOKEN=<my auth token> APP_ID=10906 ninefold app redeploy --robot --sure 

Эта команда важна, потому что это самый простой способ получить свой токен авторизации и идентификатор приложения, который необходим (в некоторых случаях), если вы хотите повторно развернуть приложение за пределами панели инструментов Ninefold. Я не буду использовать эту команду сегодня, но если вы на Ninefold, это полезно знать.

Хорошо, теперь ваше приложение Ninefold должно быть развернуто. Панель инструментов приложения Ninefold выглядит следующим образом:

Панель инструментов приложения

Вкладка «Обзор» содержит всю информацию, которую вы ожидаете: имя приложения, URL, репозиторий, ветка и т. Д. «URL-адрес развертывания» — это то, что мы будем использовать позже, чтобы включить наш CDep. Обратите внимание: флажок «Автоматически повторно развертывать мое приложение, когда я отправляю обновления в мой код» включен.

Вкладка конфигурации

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

Вернитесь на вкладку «Обзор» и нажмите на ссылку «Домены». Ваше приложение откроется, и вы сможете добавить / просмотреть все NineThings. Мы в интернете. Давайте выдвинем тривиальное изменение.

 # app/views/layouts/application.html.erb <body> <div class="row"> <h1>All the NineThings!!</h1> <h2>Let's get over 9000 NineThings!</h2> <!-- I ADDED THIS --> <%= yield %> </div> <%= javascript_include_tag "application" %> </body> 

Тривиальное изменение нашего макета. Передайте изменения и отправьте их в репозиторий Github, убедившись, что вы используете master ветку. Вернитесь к панели инструментов приложения Ninefold и подождите несколько секунд. Следующее уведомление появится в левом нижнем углу:

уведомление

Отлично. Прямо сейчас мы находимся в сфере непрерывной доставки (если у нас были хорошие тесты). Мы хотим большего, мы хотим непрерывного развертывания. Это где CodeShip приходит.

Codeship

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

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

Мастер кодирования

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

Мастер кодирования

На этом этапе вам нужно указать свои настройки и команды тестирования:

Codeship Wizard 2

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

Как только вы пройдете через мастера, вы попадете на страницу проекта. В верхней части страницы у Codeship есть несколько советов о том, что делать дальше:

Codeship следующий

Ну, смотри, вот! Как будто они читают наши мысли. Первая кнопка «Настроить непрерывное развертывание». Я говорю, что мы нажимаем на это.

Кодекс CDep

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

Прямо из блога Codeship настроить развертывание в Ninefold очень просто:

  1. Нажав кнопку «$ script»
  2. Введите свой Ninefold «URL развертывания»
  3. Выполнено.

Где вы получаете URL развертывания? Опытный читатель помнит, что это было на странице «Обзор» панели инструментов приложения Ninefold:

Обзор настройки CDep

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

Хорошо, вернитесь на страницу проекта Codeship.io и вставьте этот URL развертывания.

Скрипт развертывания CS

Сохранить шаг, и мы сделали. В самом деле.

CDep в доме

Если вы мне не верите, я докажу это. Давайте внесем еще одно заметное изменение в наше приложение:

 # app/views/layouts/application.html.erb <body> <div class="row"> <h1>All the NineThings!!</h1> <h2>Let's get over 9000 NineThings!</h2> <h3>Over 9000!!</h3> <!-- I ADDED THIS --> <%= yield %> </div> <%= javascript_include_tag "application" %> </body> 

Теперь добавьте тестовый сбой в приложение, например так:

 # test/models/nine_thing_test.rb class NineThingTest < ActiveSupport::TestCase test "the truth" do assert false end end 

Запуск rake в локальном каталоге приложения покажет сбой. Зафиксируйте и внесите эти изменения в свой репозиторий GitHub. Если вы смотрите страницу проекта Codeship.io для своего проекта, начнется сборка, например:

CS Build

Как видите, это не удалось. Если вы перезагрузите размещенное приложение Ninefold, нашего h3 там нет.

Для этого следующего бита откройте два окна браузера: одно на странице проекта Codeship и одно на панели инструментов приложения Ninefold. Исправьте тест (измените false на true ), true и нажмите.

Это фиксированная

Codeship запускает сборку, запускает тестирование, тесты проходят и развертывается в Ninefold. Затем Ninefold повторно развертывает приложение. Я сказал вам, что мы закончили. По шкале от 1 до 9 я даю этому процессу 9+!

Повторная загрузка URL-адреса приложения Ninefold покажет, что наше изменение развернуто:

Изменение

Вуаля! Мы собираемся на вечеринку, как будто это 1999 год.

Завершение

Непрерывное развертывание — это святой грааль облегчения жизни разработчиков. Это дает вам возможность сосредоточиться на коде, в то время как Ninefold фокусируется на инфраструктуре, а Codeship — на развертывании. Надеюсь, вы вдохновлены, чтобы включить это в свой рабочий процесс. Я гарантирую в 9 раз больше свободного времени!