Как создать и развернуть базовую рабочую службу. NET в локальной среде из Azure DevOps - PullRequest
1 голос
/ 05 марта 2020

У меня есть рабочее приложение-служба, которое я вручную устанавливаю на сервер dev, копируя его двоичные файлы и используя PowerShell для установки с помощью команды "New-Service".

Мы смотрим на CI / CD для автоматизировать сборку и развернуть ее артефакты. Я не могу понять, как передать «встроенные» файлы из Azure на локальный сервер, я рассмотрел такие вещи, как группы развертывания, но, похоже, это не варианты в инструментах выпуска для копирования. Я посмотрел на инструменты «копирования» и инструменты сборки, но я застрял.

Некоторые, кажется, упоминают об этом, используя «classi c», я думаю, что я использую YAML, а не classi c хотя.

Может кто-нибудь указать мне правильное направление, пожалуйста?

1 Ответ

0 голосов
/ 05 марта 2020

С классическим c пользовательским интерфейсом он немного более прост для меня (это также YAML в конце)

Что вам нужно:

  1. Установите Azure Агент развертывания на ваших компьютерах, чтобы они «стали членами» пула развертывания. Вы можете сгенерировать скрипт установки через меню пула развертывания, которое вы должны запускать на компьютере в качестве локального администратора.
  2. (я полагаю, у вас есть проект) Создать группу развертывания на уровне проекта, связанную с этим пулом развертывания
  3. Если у вас еще нет сборки, которая производит двоичные файлы, создайте ее
  4. Создайте новый выпуск
  5. Создайте этап в этом выпуске
  6. Откройте этап а в верхнем меню рядом с названием сцены вы видите три точки. Нажмите его, а затем «Добавить задание группы развертывания» -> Они предназначены для запуска чего-либо на вашем локальном компьютере с использованием ранее упомянутого агента развертывания.
  7. Составьте задачи развертывания или выберите некоторые из них на рынке. Обычно выглядит как копировать файлы -> извлечь -> заменить некоторые токены из переменных -> запустить несколько сценариев или использовать специальную задачу для установки приложения

и небольшую помощь по установке службы windows (вы может решить эту задачу, но подобные уже существуют)

$serviceName = "$(ServiceName)"
$serviceDisplayName = "$(ServiceDisplayName)"
$serviceDescription = "$(ServiceDescription)"
$exePath = "$(ServiceExeFullPath)"
$username = "NT AUTHORITY\NETWORK SERVICE"
$password = convertto-securestring -String "dummy" -AsPlainText -Force  
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password

Write-Host "====================================="
Write-Host $serviceName
Write-Host $serviceDisplayName
Write-Host $serviceDescription
Write-Host $exePath
Write-Host "====================================="

$existingService = Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'"

if ($existingService) 
{
  "'$serviceName' exists already. Stopping."
  Stop-Service $serviceName
  "Waiting 5 seconds to allow existing service to stop."
  Start-Sleep -s 5

  "Seting new binpath for the service '$serviceName'"
  sc.exe config $serviceName binpath= $exePath
  "Waiting 5 seconds to allow service to be re-configured."
  Start-Sleep -s 5  
}
else
{
  "Installing the service '$serviceName'"
  New-Service -BinaryPathName $exePath -Name $serviceName -Credential $cred -DisplayName $serviceDisplayName -Description $serviceDescription -StartupType Automatic
  "Service installed"
  "Waiting 5 seconds to allow service to be installed."
  Start-Sleep -s 5
}

"Starting the service."
Start-Service $serviceName
"Completed."

Переменные типа '$ (ServiceName)' заменены из переменных выпуска AzureDevops. Вы можете прочитать больше об использовании переменных ЗДЕСЬ

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

$serviceName = "$(ServiceName)"
$failureDelay = [int] $(ServiceFailureDelayMs)
$failureAction = "restart"
$reset = [int] $(ServiceResetSeconds)

$service = Get-Service $serviceName -ErrorAction SilentlyContinue

if(!$service)
{
    Write-Host "##vso[task.LogIssue type=warning;]Directory Windows Service '$serviceName' not found, skip."
    return
}

"Updating '$serviceName' service recovery options."

sc.exe failure $service.Name actions= $failureAction/$failureDelay/$failureAction/$failureDelay/$failureAction/$failureDelay reset= $reset

"Done."
...