Рубрики
Uncategorized

Самостоятельные агенты в Azure DevOps: Небольшой трюк по экономии затрат

Azure Devops отлично справляется с предоставлением услуг по размещенным агентам. Они приходят, loa … Tagged с DevOps, Azure, AzurevEvops.

Azure Devops отлично справляется с предоставлением услуг по размещенным агентам. Они загружены всем необходимым программным обеспечением, они заботятся об обновлениях и обо всем остальном, но у них есть некоторые серьезные недостатки:

  • Нет статического внешнего IP-адреса (поэтому невозможно иметь дополнительный уровень безопасности))
  • Вы получаете новую виртуальную машину каждый раз, поэтому вам нужно клонировать свежий репозиторий, установить свежий набор пакетов NPM, установить все эти базовые изображения Docker (не имеет большого значения для альпийских изображений, но когда речь идет о Microsoft One, это действительно нападающий)
  • Для проектов с замкнутым исходным кодом существует жесткий лимит 1800 минут в месяц на 1 размещенную работу (мне не нравятся ограничения, даже если я никогда не поражаю их 😀) И так далее — вы называете это

Чтобы преодолеть это, можно развернуть самостоятельные агенты, но тогда вам придется иметь дело с обновлениями, установкой инструментов и Дополнительная стоимость . Как иметь дело с обновлениями, и фактическое управление освещено в этот пост в блоге , но это все еще оставляет вопрос о стоимости частично открытой. Я провел некоторое время и сделал несколько улучшений в работе Вутера де Корта в вилке его репозитория, ознакомьтесь с Мой репозиторий Анкет Здесь я сделал некоторую оптимизацию и улучшение сценариев, но главное, что я хочу осветить в этом сообщении в блоге,-это инструмент оптимизации затрат, который я создал для нашего флота самоуправляемых агентов.

Проблема

У нас было только 2 размещения рабочих мест VS2015/17 для выполнения сборки и выпусков для 10 проектов, каждая из которых требовалось от 5 до 20 минут для сборки и где -то от 15 до 30 минут для выпуска. Это было довольно налогом, особенно когда очереди накапливались.

Идея

В нашей конкретной ситуации у нас есть 7 параллельных рабочих мест для самостоятельных агентов, которые поступают на «бесплатную» через подписку на Visual Studio, поэтому я начал искать, как использовать их для улучшения нашей скорости сборки и выпуска. Первоначальная настройка была строго следуя Wouter de Kort Blog Series , с автоматическим переключением виртуальных машин в масштабе виртуальных машин, установленной ночью и по выходным, чтобы сэкономить расходы. Но, как только я начал получать запросы, чтобы начать несколько виртуальных машин на выходные или начать их позже вечером, чтобы выполнить некоторые внечатые задачи или ранее утром, чтобы выполнить срочные развертывания, я начал искать способ автоматизировать эти задачи Анкет Что приводит к тому, что идея непрерывной веб -работы, которая будет постоянно отслеживать очередь в целевом пуле и запустить виртуальные машины, когда они необходимы (и останавливают их, когда они не нужны).

Реализация

Я пришел в Azure DevOps с сильным опытом команды, поэтому я надеялся найти что -то похожее на очередь сборки в TeamCity, но, увы, у них есть другой подход: все задачи назначены в бассейн, где они поднимаются Первый агент, чтобы быть онлайн и бесплатно в манере FIFO (сначала, сначала). Нет никакой очереди, все задачи просто имеют собственность «результат». Если он нулевой, то эта задача еще не выполнена. Если все задачи, назначенные в пул, имеют не ненулевое свойство «результат», то нечего делать. Таким образом, если в бассейне есть некоторые задачи с нулевым свойством «результат», то код проверит, сколько онлайн -агентов присутствует в пуле. Если количество агентов больше или равна количеству задач, опять же, нечего делать. Если количество агентов меньше, чем количество задач, нам нужно запустить больше виртуальных машин в масштабе виртуальных машин, установленных для наших агентов. Если в нашем пуле присутствует больше агентов, чем количество назначенных задач, нам нужно остановить дополнительные агенты в виртуальных машинах в наборе масштаба. Кроме того, существует возможность определить рабочие часы и дни недели, когда в Интернете есть минимально необходимое количество агентов, чтобы ускорить развитие (поэтому командам не нужно ждать, пока агент станет активным и потребляет задачу, но Задача будет запущена немедленно). Проверка на предоставление большего количества виртуальных машин выполняется один раз каждые 2 минуты, чтобы минимизировать время ожидания и не злоупотреблять API. Проверка на депрессию виртуальной машины выполняется один раз через 15 минут, это позволяет больше времени выполнения для агентов. Обычно я наблюдаю, что почти сразу после успешной сборки разработчика захочет развернуть в тестовой среде.

По моему скромному мнению, это решение лучше, чем статическое отключение/на виртуальных машинах в каком-то графике, потому что оно позволяет выполнять любую задачу (компиляция, тестирование, выпуск, все, что выполняется на ваших агентах) в любое время в только что в просто -время. Хотя, естественно, если все агенты будут отключены, им потребуется некоторое время, чтобы стать в Интернете, но из-за варианта бизнеса в день/день это произойдет только в нерабочее время.

Все настройки и инструкции по развертыванию для приложения Autoscaler описаны Здесь Анкет Я бы не стал дублировать их в этом сообщении в блоге, так как сверхурочные они могли бы измениться, и документ Readme будет обновлен.

Кодекс приложения Autoscaler можно увидеть в это место Анкет

Есть также Шаблон руки Для базовой конфигурации веб -приложения, которое подходит, если у вас есть только один пул в Azure DevOps для мониторинга, поскольку оно определяет настройки на уровне настроек приложения самого веб -приложения. Если есть более одного пула, в настройках приложения веб -приложения должны быть определены только общие настройки, в то время как конкретные настройки должны быть добавлены в настройки приложения отдельного веб -задания. Вы можете размещать столько веб -заданий, сколько вам нужно, но присмотреть за пределами веб -приложений.

Имейте в виду, что шаблон ARM по умолчанию будет развернуться в веб -приложении D1 (общее веб -приложение, которое позволяет ограничить количество процессора и только 1 ГБ ОЗУ без всегда на ). Функция «Всегда на» гарантирует, что процесс хостинга всегда бодрствует и не закрывается после 20 минут бездействия. Таким образом, если веб -задание будет развернуто без дополнительных мер предосторожности, она не сработает, так как время выполнения веб -приложения отключит процесс Куду после 20 минут бездействия. Существует хороший трюк, чтобы продолжать работать и работать: вам нужно пропиннуть домашнюю страницу вашего веб -приложения Kudu хотя бы один раз в 20 минут. Я использую https://www.happypps.io/ Чтобы посетить домашнюю страницу Kudu моего веб -приложения один раз за 5 минут по адресу https://webappname.scm.azurewebsites.net/

Намекает на развертывание

По умолчанию, время выполнения веб -приложения Azure не выполняет непрерывную веб -задание с пути, по которому оно развернуто, но я все еще хочу быть уверенным, что она не работает, когда я ее развернул, поэтому я использую следующие сценарии PowerShell Чтобы остановить/начать веб -работу

Чтобы остановить веб -Джонб:

Invoke-AzureRmResourceAction -ResourceGroupName resourceGroupName -ResourceType Microsoft.Web/sites/continuouswebjobs -ResourceName webAppName/webJobName -Action Stop -Force -ApiVersion 2018-02-01

Чтобы начать WebJob:

Invoke-AzureRmResourceAction -ResourceGroupName resourceGroupName -ResourceType Microsoft.Web/sites/continuouswebjobs -ResourceName webAppName/webJobName -Action Start -Force -ApiVersion 2018-02-01

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

Этот пост был создан мной и отредактирован моим другом Роб Хабресс Анкет

Оригинал: «https://dev.to/akuryan/self-hosted-agents-at-azure-devops-a-little-cost-saving-trick-4297»