Статьи

Сообщите New Relic о ваших развертываниях с TeamCity и PowerShell

Функции заметок о развертывании в новой Relic уже давно существуют, но, как и многие другие вещи, с которыми сталкиваются разработчики вне экосистемы Microsoft, это еще один сервис, в котором мы немного опоздали на вечеринку. Возможность отслеживать производительность приложения по отношению к определенной версии вашего приложения — это отличный способ отслеживать прогресс любой работы, которую ваша команда вложила, чтобы повысить производительность вашего приложения и общее впечатление от посетителя. Реализация этого удивительно проста, и возникает вопрос: если вы этого не делаете, то почему бы и нет?

В отличие от других языков, только за последние два года разработчики .Net начали воспринимать New Relic как имя для домашнего использования при профилировании производительности, так же как и другие необходимые инструменты, такие как Nuget, WebDeploy и MVC. на известность. Возможность отслеживать пользователей, посетителей, производительность приложений, производительность сервера, производительность базы данных и многое другое в одной легко пересекающейся форме — это удивительный элемент набора, направляемый к вашей базе кода.

образ

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

Единственным недостатком является то, что это доступно только для новых учетных записей Relic на учетной записи Pro (не является стандартной или бесплатной).

Документация New Relic   относится к простому вызову командной строки curl, чтобы использовать его — хотя, как и большинство других вещей во вселенной Windows, удивительность curl не приходит «из коробки», что делает его немного более сложным для выполнения.

curl -H "x-api-key:REPLACE_WITH_YOUR_APP_ID" -d "deployment[app_name]=REPLACE_WITH_YOUR_APP_NAME" https://api.newrelic.com/deployments.xml

Поскольку мы не получаем скручивание из коробки, я сделал замену вышеприведенной команды небольшим количеством скрипта PowerShell.

Param (
[string]$deployedby = $(throw "-deployedby is required."),
[string]$appid = $(throw "-appid is required."),
[string]$revision = "",
[string]$apikey = $(throw "-apikey is required."),
[string]$description = $(throw "-description is required.")
)
$description = [Uri]::EscapeDataString($description)
$URL = "http://api.newrelic.com/deployments.xml"
$data = "deployment[user]=${user}&deployment[user]=${deployedby}&deployment[app_id]=${appid}&deployment[revision]=${revision}&deployment[description]=${description}"
$URI = New-Object System.Uri($URL, $true)
$request = [System.Net.HttpWebRequest]::Create($URI)
$request.Method = "POST"
$request.Headers.Add("x-api-key", $apikey);
$request.ContentType = "application/x-www-form-urlencoded"
$request.Accept = "text/xml"
try {
$stream = New-Object IO.StreamWriter $request.GetRequestStream()
$stream.AutoFlush = $True
$postData = [System.Text.Encoding]::UTF8.GetBytes($data)
$stream.Write($postData, 0, $postData.length)
$stream.Close()
$response = $request.GetResponse() $response.Close()
if ([int]$response.StatusCode -eq 201) {
Write-Host "Deployment note pushed to NewRelic."
} else {
Write-Host "Deployment note failed to push to NewRelic."
}
} catch [System.Net.WebException] {
$excep = $_.Exception.Response
Write-Host "NewRelic Deploy API call failed. Exception: $excep" }

Как это работает в TeamCity

Первое, что вам нужно сделать, это получить некоторую информацию из New Relic для использования с вашими вызовами API. Эту информацию можно найти на странице «развертывания» для вашего приложения в RPM-версии New Relic.

Чтобы попасть туда, просто следуйте меню

Приложения ->

-> События -> Развертывания

Вы должны увидеть страницу, которая выглядит следующим образом (это страница развертываний для этого самого блога) и содержит все детали, необходимые для вызова API:

образ

Запишите следующее на потом;

  • Новый Relic API Key
  • Идентификатор приложения

Сохраните скрипт, который я написал выше, в файл. Я назвал мой  AddNewReliceDeploymentNote.ps1  и поместил его в   каталог / Automation в папке моего решения.

образ

Проверьте это в вашей системе контроля версий.

Теперь откройте конфигурацию сборки вашего сайта в TeamCity.

Это должна быть конфигурация сборки, из которой вы развертываете.

Добавьте новую задачу сборки  после  задачи развертывания MSBUILD — для разработчиков ASP.Net, использующих профили публикации или просто вызывающих WebDeploy, эта новая задача сборки должна выполняться после вызова файла решения с  DeployOnBuild = true  для его построения и развертывания.

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

Свойства для этапа сборки:

  • Название шага : «Уведомить NewRelic о новом развертывании»
  • Рабочий каталог : «Автоматизация»
  • Файл сценария : «AddNewRelicDeploymentNote.ps1»
  • Режим выполнения скрипта: «Выполнить скрипт .ps1 с аргументом –File»
  • ScriptArguments :
    «…
    -apikey [вставить свой ключ API]
    -appid [вставить свой appid]
    -deployedby» TeamCity »
    -description» Автоматическое развертывание #% build.number% для ревизии% build.vcs.number. [Ваш источник TeamCity SourceControl] % » 
    -revision»% build.vcs.number. [Ваш источник TeamCity SourceControl]% »
    …»

образ

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

образ

А теперь иди, возьми себе [вставь вкусный напиток] и наслаждайся потрясающей новизной своего твика.