Создавайте и развертывайте приложения для проверки для улучшения проверки кода

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

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

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

Хостинг вашего приложения стоит денег, и оставить эти промежуточные и проверочные среды работающими, пока они не используются, равносильно выбрасыванию денег на ветер. Это особенно верно в отношении поставщиков IaaS и PaaS, таких как Heroku, где затраты на ресурсы пропорциональны второму. Компании, которым не хватает денег, могут даже отказаться от использования приложений для обзора, чтобы сэкономить деньги, если стоимость этих ресурсов станет непомерно высокой. Это вполне может быть основной причиной, по которой любая конкретная инженерная организация предпочитает не использовать приложения для проверки как часть процесса проверки кода.

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

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

Создание нового приложения Heroku

Сначала мы клонируем репозиторий GitHub, установим его зависимости и запустим приложение локально. Вы можете найти образец репо на GitHub.

git clone https://github.com/thawkin3/heroku-review-apps-and-autoidle.git
cd heroku-review-apps-and-autoidle
npm install
npm start

Затем мы превратим этот проект в приложение Heroku, войдя в интерфейс командной строки Heroku, создав приложение, развернув его в Heroku и открыв в нашем браузере.

heroku login
heroku create # or `heroku create <app name here>`
git push heroku master
heroku open

Вот как выглядит приложение на данный момент:

Вы можете просмотреть приложение, размещенное на Heroku, здесь.

Создание конвейера Heroku

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

Мы дадим нашему конвейеру имя, подключим его к нашему репозиторию GitHub, а затем нажмем «Создать новый конвейер».

Включение приложений обзора для нашего конвейера

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

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

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

Создание нашего первого приложения Pull Request и Review

Пришло время сделать наш первый запрос на включение. Давайте создадим новую ветку, добавим еще немного контента в наш index.html файл, зафиксируем изменения и отправим в нашу ветку.

git checkout -b feature/steps
# make changes to the `index.html` file
git add .
git commit -m "feat: adds steps for creating a review app"
git push --set-upstream origin feature/steps

Затем мы можем перейти к нашему репозиторию GitHub, чтобы создать запрос на перенос, чтобы объединить нашу функциональную ветку с основной веткой.

После заполнения запроса на перенос мы увидим комментарий о том, что ожидается развертывание нового приложения для проверки.

Как здорово! Если мы перейдем к нашей панели мониторинга конвейера Heroku, мы сможем увидеть получившееся приложение для проверки после его успешного развертывания.

Мы можем открыть приложение обзора со страницы конвейера Heroku с помощью кнопки «Открыть приложение» или вернуться к нашему запросу на вытягивание в GitHub и найти кнопку «Просмотр развертывания».

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

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

Обзор приложений - замечательная вещь!

После слияния нашего кода с основной веткой мы теперь можем выпустить этот код в производственную среду, используя команду git push heroku master из нашего терминала. Или, для более реалистичного сценария, мы можем продвинуть наш код в промежуточную среду или автоматически развернуть код в производственной среде после слияния. Однако мы не будем рассматривать эти настройки рабочего процесса для целей данной статьи.

Дилемма

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

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

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

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

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

AutoIdle спешит на помощь

AutoIdle - это надстройка Heroku, которая автоматически переводит ваши промежуточные и проверочные приложения в спящий режим после 30 минут бездействия. Когда, наконец, получен HTTP-запрос, AutoIdle повторно активирует приложение. Это идеально подходит для временных приложений, которым действительно не нужно оставаться активными все время.

Разумеется, производственные приложения должны быть доступны в любой момент, поэтому AutoIdle не следует использовать в производственной среде!

Установка AutoIdle

Мы можем добавить AutoIdle в наше приложение, выполнив следующую команду в нашем терминале:

heroku addons:create autoidle

Вот и все! Больше нет ступеней. AutoIdle теперь установлен и готов сэкономить вам деньги.

Однако важно отметить, что приведенная выше команда добавляет AutoIdle к вашему фактическому приложению, а не к вашим приложениям для проверки. Поэтому, если это производственное приложение, ориентированное на клиента, вам не следует добавлять сюда AutoIdle! Однако эта команда идеально подходит для добавления AutoIdle к промежуточным приложениям или другим приложениям, не ориентированным на клиента, которые могут спать в неактивном состоянии.

Если вам нужно удалить надстройку AutoIdle, вы всегда можете сделать это с помощью этой команды:

heroku addons:destroy autoidle

Поскольку в нашем случае мы хотим добавить AutoIdle только в наши приложения для проверки, вместо этого мы укажем нашу надстройку в app.json файле на корневом уровне нашего репозитория. Следующий фрагмент JSON указывает, что для нашей “review” среды мы хотим использовать надстройку “autoidle:hobby”.

"environments": {
  "review": {
    "addons": ["autoidle:hobby"]
  }
}

Полный список типов планов AutoIdle можно найти на Heroku.

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

Затем мы можем просмотреть нашу панель управления AutoIdle, выполнив эту команду в нашем терминале:

heroku addons:open autoidle

Наша дашборд изначально выглядит так:

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

30 минут спустя ... наше приложение было остановлено. Отлично!

Теперь давайте подождем еще несколько часов, чтобы увидеть, какую экономию принесет нам AutoIdle. Я создал это приложение для обзора поздно вечером, поэтому давайте посмотрим, как выглядела панель управления, когда я проверил ее на следующее утро:

Как видите, наше приложение было остановлено на 90% времени (оно работало один час, а затем остановилось на девять часов за ночь). В настоящее время у нас есть ориентировочная ежемесячная экономия в размере 4,30 доллара США в месяц. Но имейте в виду, что это только для одного приложения для обзора Hobby dyno, которое мы используем менее дня.

Представьте, если бы у нас было 100 приложений для обзора. Теперь у нас будет ориентировочная ежемесячная экономия в размере 430 долларов в месяц! Приятно осознавать, что мы не стали бы платить за все эти простои, если бы не использовали наше приложение!

Если теперь мы попытаемся просмотреть наше приложение для обзора в домене herokuapp, мы получим экран с ошибкой:

Это потому, что наше приложение для обзора все еще спит. Обычно приложение просыпается через 5-10 секунд после этого первого запроса. По истечении этого периода времени мы можем обновить наш экран и снова увидеть, как наше приложение работает нормально.

Один из способов избежать появления этой начальной страницы с ошибкой - использовать домен autoidleapp вместо домена herokuapp для нашего приложения. В нашем случае вместо посещения https://autoidle-dem-feature-re-zifkor.herokuapp.com мы можем посетить https://autoidle-dem-feature-re-zifkor.autoidleapp.com. Это то же приложение, но теперь без проблем с загрузкой первой страницы.

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

Заключение

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

В нашем примере у нас было одно приложение и один запрос на перенос. Мы также используем дино Hobby более низкого уровня. В нашем случае наши затраты будут относительно низкими. Но представьте, что вы используете приложения для обзора в компании, производящей программное обеспечение для предприятий. С сотнями инженеров, запросами на вытягивание и приложениями для обзора, все с использованием больших динамометрических станций и дополнительных надстроек Heroku, затраты могут действительно возрасти.

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