Настройка непрерывного развертывания с помощью Chocolatey
Примечание.
служба автоматизации Azure конфигурация состояния будет прекращена 30 сентября 2027 г.Конфигурация компьютера Azure по этой дате. Дополнительные сведения см. в публикации блога. Служба конфигурации компьютера Azure объединяет функции расширения DSC, служба автоматизации Azure конфигурации состояния и наиболее часто запрашиваемые функции из отзывов клиентов. Конфигурация компьютера Azure также включает поддержку гибридных компьютеров с помощью серверов с поддержкой Arc.
Внимание
служба автоматизации Azure DSC для Linux вышел на пенсию 30 сентября 2023 года. Дополнительные сведения см. в объявлении о выпуске.
В среде DevOps существует множество средств, которые упрощают различные аспекты конвейера непрерывной интеграции. State Configuration службы автоматизации Azure — это долгожданная новая служба, которую могут использовать команды разработчиков DevOps.
Служба автоматизации Azure — это управляемая служба в Microsoft Azure, которая позволяет автоматизировать различные задачи с помощью модулей Runbook, узлов и общих ресурсов, таких как учетные данные, расписания и глобальные переменные. Служба State Configuration службы автоматизации Azure расширяет возможности автоматизации, которые теперь включают средства Desired State Configuration (DSC) PowerShell. Вот прекрасный обзор на эту тему.
В этой статье показана настройка непрерывного развертывания для компьютера Windows. Вы можете легко расширить метод, чтобы включить столько компьютеров Windows, сколько необходимо в роли, например веб-сайт, и перейти оттуда к дополнительным ролям.
На высоком уровне
Эта схема включает немало действий, но, к счастью, их можно разбить на два основных процесса:
- написание и тестирование кода, после чего следуют создание и публикация пакетов установки для основной и вспомогательной версий системы;
- создание виртуальных машин, которые устанавливают и выполняют код в пакетах, и управление этими виртуальными машинами.
Выполнив эти основные процессы, можно переходить к автоматическому обновлению пакета, который выполняется на виртуальных машинах по мере создания и развертывания новых версий.
Обзор компонентов
Диспетчеры пакетов, такие как apt-get, хорошо известны среди разработчиков Linux и гораздо меньше — среди тех, кто работает с Windows. Шоколадный — это менеджер пакетов для Windows. Блог Скотта Ханселмана о Шоколадии является большим введением. Chocolatey позволяет использовать командную строку для установки пакетов из центрального репозитория в операционную систему Windows. Вы можете создать собственный репозиторий и управлять им, а Chocolatey будет устанавливать пакеты из любого указанного вами количества репозиториев.
PowerShell DSC — это средство PowerShell, которое позволяет объявить конфигурацию, необходимую для компьютера. Например, если требуется установить Chocolatey, установить службы IIS, открыть порт 80 и установить версию 1.0.0 веб-сайта, Configuration Manager DSC (LCM) реализует эту конфигурацию. Опрашиваемый сервер DSC содержит хранилище конфигураций для компьютеров. Локальный диспетчер конфигураций на каждом компьютере периодически проверяет, совпадает ли его конфигурация с сохраненной конфигурацией. Он либо сообщает о состоянии, либо пытается привести компьютер в соответствие с сохраненной конфигурацией. Сохраненную конфигурацию на опрашивающем сервере можно изменить, чтобы привести компьютер или набор компьютеров в соответствие с измененной конфигурацией.
Ресурс DSC — это модуль кода, который имеет определенные возможности, такие как управление сетевыми подключениями, Active Directory или SQL Server. Ресурс Chocolatey DSC знает, как получить доступ к серверу NuGet, скачать пакеты, установить пакеты и выполнить другие задачи. Имеется также множество других ресурсов DSC, доступных в коллекции PowerShell. Эти модули устанавливаются на опрашиваемом сервере State Configuration службы автоматизации Azure, поэтому их можно использовать в ваших конфигурациях.
Шаблоны Resource Manager предоставляют декларативный способ создания ресурсов для инфраструктуры, например:
- сети и подсети
- сетевая безопасность
- маршрутизация
- подсистемы балансировки нагрузки,
- Сетевые адаптеры, виртуальные машины и другие
Сравнение модели развертывания Resource Manager (декларативной) с классической моделью развертывания Azure (императивно), см . в Azure Resource Manager и классическом развертывании. Кроме того, в статье рассматриваются основные поставщики ресурсов: вычислительных, ресурсов хранилища и сетевых.
Одним из основных компонентов шаблона Resource Manager является его возможность установить расширение виртуальной машины во время подготовки виртуальной машины. Расширение VM предоставляет определенные возможности, такие как выполнение пользовательского сценария, установка антивирусного программного обеспечения и выполнение сценария конфигурации DSC. Существует много других типов расширений VM.
Краткий обзор схемы
Если начинать сначала, вы пишете код, выполняете сборку и тестирование, а затем создаете пакет установки. Chocolatey может обрабатывать пакеты установки различных типов, например MSI, MSU и ZIP. Кроме того, в вашем распоряжении имеются все возможности PowerShell для фактической установки, если возможностей Chocolatey недостаточно. Поместите пакет в легкодоступное место, например в репозиторий пакетов. Он может располагаться где угодно. Например, в этом примере используется общая папка в учетной записи хранилища больших двоичных объектов Azure. Chocolatey работает непосредственно с серверами NuGet и некоторыми другими серверами в рамках управления метаданными пакета. Возможные варианты описаны в этой статье. В этом примере используется NuGet. Nuspec — это метаданные о пакетах. Сведения о Nuspec компилируются в NuPkg и хранятся на сервере NuGet. Когда конфигурация запрашивает пакет по имени и ссылается на сервер NuGet, ресурс DSC Chocolatey на виртуальной машине извлекает пакет и устанавливает его. Можно также запросить определенную версию пакета.
В левой нижней части схемы упоминается шаблон Azure Resource Manager. В этом примере расширение виртуальной машины регистрирует виртуальную машину на опрашиваемом сервере State Configuration службы автоматизации Azure как узел. Конфигурация хранится на опрашиваемом сервере дважды: один раз в виде обычного текста и после компиляции в виде MOF-файла. На портале Azure MOF-файл указывается как "конфигурация узла", а не просто "конфигурация".
Это относительно просто создать Nuspec, скомпилировать его и сохранить его на сервере NuGet. Для следующего шага непрерывного развертывания требуются следующие однократные задачи:
- Настройка опрашивающего сервера
- Регистрация узлов на сервере
- Создание начальной конфигурации на сервере
При обновлении и развертывании пакетов в репозитории необходимо обновить конфигурацию и конфигурацию узла на сервере вытягивания.
Если вы не начинаете с шаблона Resource Manager, существуют команды PowerShell, которые помогут вам зарегистрировать виртуальные машины на сервере извлечения. Дополнительные сведения см. в статье Подключение компьютеров для управления с помощью State Configuration службы автоматизации Azure.
Сведения о примере использования
В начале примера в этой статье создается виртуальная машина с помощью универсального образа Windows Server 2012 R2 из коллекции Azure. Ее можно запустить из любого сохраненного образа, а затем настроить, используя конфигурацию DSC. Однако изменение конфигурации, встроенной в образ, требует гораздо больше усилий, чем динамическое обновление конфигурации с помощью DSC.
Для использования этого метода на виртуальных машинах не обязательно использовать шаблон Resource Manager и расширение VM. Кроме того, виртуальные машины, на которых должно выполняться непрерывное развертывание, не обязательно должны размещаться в Azure. Просто установите Chocolatey и настройте LCM на виртуальной машине, чтобы он знал, где находится вытягивающий сервер.
На время обновления пакета на виртуальной машине в рабочей среде эту виртуальную машину придется вывести из эксплуатации. Это можно сделать разными способами. Например, на виртуальной машине, которая находится под контролем балансировщика нагрузки Azure, можно добавить настраиваемый зонд. При обновлении виртуальной машины конечная точка пробы возвращает 400. Настройка, необходимая для того, чтобы это изменение было в вашей конфигурации, так как можно переключить его обратно на возврат 200 после завершения обновления.
Полный исходный код для этого примера хранится в этом проекте Visual Studio на сайте GitHub.
Шаг 1. Настройка опрашивающего сервера и учетной записи службы автоматизации
Выполните следующие команды в сеансе PowerShell с проверкой подлинности.Connect-AzAccount
New-AzResourceGroup -Name MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES
$newAzAutomationAccountSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
Location = 'MY-RG-LOCATION-IN-QUOTES'
Name = 'MY-AUTOMATION-ACCOUNT'
}
New-AzAutomationAccount @newAzAutomationAccountSplat
Этот шаг занимает несколько минут, пока настроит сервер вытягивания.
Вы можете создать учетную запись службы автоматизации в любом из следующих регионов Azure:
- восточная часть США 2
- Центрально-южная часть США
- US Gov (Вирджиния)
- Западная Европа
- Southeast Asia
- Восточная Япония
- Центральная Индия
- Юго-Восточная часть Австралии
- Центральная Канада
- Северная Европа
Шаг 2. Настройка расширений виртуальной машины в шаблон Resource Manager
Сведения о регистрации виртуальных машин (с помощью расширения VM PowerShell DSC) можно найти в этом кратком руководстве по шаблонам Azure. На этом шаге новая виртуальная машина регистрируется на опрашивающем сервере в списке узлов State Configuration. В рамках этой регистрации указывается конфигурация узла, применяемая к узлу. Эта конфигурация узла еще не должна существовать на сервере извлечения, но необходимо выбрать имя узла и имя конфигурации. В этом примере узел имеет имя isvbox
конфигурации ISVBoxConfig
. Указано имя DeploymentTemplate.json
ISVBoxConfig.isvbox
конфигурации узла.
Шаг 3. Добавление необходимых ресурсов DSC на вытягивающий сервер
Коллекция PowerShell может установить ресурсы DSC в учетную запись служба автоматизации Azure. Перейдите к нужному ресурсу и выберите "Развернуть в служба автоматизации Azure".
Недавно на портал Azure добавлена возможность получать новые модули и обновлять имеющиеся. Щелкните значок "Обзор коллекции ", чтобы просмотреть список модулей в коллекции, детализацию и импорт в учетную запись службы автоматизации. Этот процесс можно использовать для обновления модулей. Кроме того, функция импорта проверяет зависимости с другими модулями, чтобы обеспечить отсутствие синхронизации.
Существует также ручной подход, используемый только один раз для каждого ресурса, если потом вы не будете его обновлять. Дополнительные сведения о разработке модулей интеграции PowerShell см. в статье Разработка модулей интеграции для службы автоматизации Azure.
Примечание.
Структура папок модуля интеграции PowerShell для компьютеров Windows немного отличается от структуры папок, ожидаемой службой автоматизации Azure.
Установите Windows Management Framework 5 (не требуется для Windows 10).
Установка модуля интеграции.
Install-Module -Name MODULE-NAME` <—grabs the module from the PowerShell Gallery
Скопируйте папку модуля из
C:\Program Files\WindowsPowerShell\Modules\MODULE-NAME
временной папки.Удалите примеры и документацию из основной папки.
Упакуйте основную папку, присвоив ZIP-файлу такое же имя, как у папки.
Поместите ZIP-файл в легкодоступное расположение HTTP, например хранилище BLOB-объектов в учетной записи службы хранилища Azure.
Выполните следующую команду.
$newAzAutomationModuleSplat = @{ ResourceGroupName = 'MY-AUTOMATION-RG' AutomationAccountName = 'MY-AUTOMATION-ACCOUNT' Name = 'MODULE-NAME' ContentLinkUri = 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip' } New-AzAutomationModule @newAzAutomationModuleSplat
Приведенный здесь пример выполняет эти действия для cChoco и xNetworking.
Шаг 4. Добавление конфигурации узла на сервер извлечения
В первоначальном импорте конфигурации на опрашивающий сервер и ее компиляции нет ничего особенного. Все последующие операции импорта и компиляции с этой конфигурацией выполняются аналогичным образом. Каждый раз, когда вам нужно обновить пакет и передать его в рабочую среду, перед этим шагом проверяйте правильность файла конфигурации (в том числе обновление версии пакета). Ниже приведен файл ISVBoxConfig.ps1
конфигурации:
Configuration ISVBoxConfig
{
Import-DscResource -ModuleName cChoco
Import-DscResource -ModuleName xNetworking
Node 'isvbox' {
cChocoInstaller installChoco
{
InstallDir = 'C:\choco'
}
WindowsFeature installIIS
{
Ensure = 'Present'
Name = 'Web-Server'
}
xFirewall WebFirewallRule
{
Direction = 'Inbound'
Name = 'Web-Server-TCP-In'
DisplayName = 'Web Server (TCP-In)'
Description = 'IIS allow incoming web site traffic.'
Enabled = 'True'
Action = 'Allow'
Protocol = 'TCP'
LocalPort = '80'
Ensure = 'Present'
}
cChocoPackageInstaller trivialWeb
{
Name = 'trivialweb'
Version = '1.0.0'
Source = 'MY-NUGET-V2-SERVER-ADDRESS'
DependsOn = '[cChocoInstaller]installChoco','[WindowsFeature]installIIS'
}
}
}
Следующий New-ConfigurationScript.ps1
сценарий был изменен для использования модуля Az PowerShell:
$importAzAutomationDscConfigurationSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
SourcePath = 'C:\temp\AzureAutomationDsc\ISVBoxConfig.ps1'
Published = -Published
Force = -Force
}
Import-AzAutomationDscConfiguration @importAzAutomationDscConfigurationSplat
$startAzAutomationDscCompilationJobSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
ConfigurationName = 'ISVBoxConfig'
}
$jobData = Start-AzAutomationDscCompilationJob @startAzAutomationDscCompilationJobSplat
$compilationJobId = $jobData.Id
$getAzAutomationDscCompilationJobSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
Id = $compilationJobId
}
Get-AzAutomationDscCompilationJob @getAzAutomationDscCompilationJobSplat
Шаг 5. Создание и обслуживание метаданных пакета
Для описания каждого пакета, который помещается в репозиторий пакетов, необходимы метаданные Nuspec. Их следует компилировать и хранить на сервере NuGet. Дополнительные сведения см. в статье [Создание пакета NuGet с помощью nuget.exe CLI].
В качестве сервера NuGet можно использовать сайт MyGet.org. Вы можете приобрести эту службу, но существует бесплатный начальный номер SKU. Инструкции по установке собственного сервера NuGet для частных пакетов см. в документации по Nuget.org.
Шаг 6. Связать все вместе
Каждый раз, когда версия проходит контроль качества и утверждается для развертывания, создается пакет, а nuspec и nupkg обновляются и развертываются на сервере NuGet. Необходимо обновить конфигурацию (шаг 4) с новым номером версии. Затем отправьте его на опрашивающий сервер и скомпилируйте его.
С этого момента именно виртуальные машины, зависящие от этой конфигурации, отвечают за получение обновления и его установку. Каждое такое обновление довольно просто и представляет собой одну-две строки кода PowerShell. Для Azure DevOps некоторые из них инкапсулируются в задачах сборки, которые можно объединить в сборке. Дополнительные сведения см. в этой статье. В этом репозитории GitHub описаны доступные задачи сборки.
Связанные статьи
- Обзор Azure Automation DSC
- Подключение компьютеров для управления при помощи DSC в службе автоматизации Azure
Следующие шаги
- Общие сведения см. в статье Обзор State Configuration службы автоматизации Azure.
- Чтобы использовать эту функцию, см. раздел Начало работы со службой State Configuration службы автоматизации Azure.
- Сведения о компилировании конфигураций DSC, которые затем можно назначить целевым узлам, см. в статье Компилирование конфигураций DSC в службе State Configuration службы автоматизации Azure.
- Справочник по командлетам PowerShell см. в документации по Az.Automation.
- Сведения о ценах см. на странице с расценками для службы настройки состояния службы автоматизации Azure.