Konfigurowanie ciągłego wdrażania za pomocą narzędzia Chocolatey
Uwaga
Usługa Azure Automation State Configuration zostanie wycofana 30 września 2027 r., przechodząc do usługi Azure Machine Configuration do tej daty. Aby uzyskać więcej informacji, zobacz ogłoszenie w blogu. Usługa Azure Machine Configuration łączy funkcje rozszerzenia DSC, usługi Azure Automation State Configuration i najczęściej żądanych funkcji opinii klientów. Usługa Azure Machine Configuration obejmuje również obsługę maszyn hybrydowych za pośrednictwem serwerów z obsługą usługi Arc.
Uwaga
Usługa Azure Automation DSC dla systemu Linux została wycofana 30 września 2023 r. Aby uzyskać więcej informacji, zobacz ogłoszenie.
W świecie DevOps istnieje wiele narzędzi, które ułatwiają zarządzanie różnymi punktami w potoku ciągłej integracji. Usługa Azure Automation State Configuration to mile widziany nowy dodatek do opcji, które mogą stosować zespoły DevOps.
Azure Automation to usługa zarządzana na platformie Microsoft Azure, która umożliwia automatyzowanie różnych zadań przy użyciu elementów Runbook, węzłów i zasobów udostępnionych, takich jak poświadczenia, harmonogramy i zmienne globalne. Usługa Azure Automation State Configuration rozszerza tę funkcję automatyzacji w celu uwzględnienia narzędzi konfiguracji żądanego stanu programu PowerShell (DSC). Oto doskonałe omówienie.
W tym artykule pokazano, jak skonfigurować ciągłe wdrażanie na komputerze z systemem Windows. Można łatwo rozszerzyć technikę, aby uwzględnić dowolną liczbę komputerów z systemem Windows w roli, na przykład witrynę internetową i przejść stamtąd do większej liczby ról.
Na wysokim poziomie
Dzieje się tu sporo, ale na szczęście można ją podzielić na dwa główne procesy:
- Pisanie kodu i testowanie go, a następnie tworzenie i publikowanie pakietów instalacyjnych dla głównych i pomocniczych wersji systemu.
- Tworzenie i zarządzanie maszynami wirtualnymi, które instalują i wykonują kod w pakietach.
Po wdrożeniu obu tych podstawowych procesów można łatwo automatycznie zaktualizować pakiet na maszynach wirtualnych w miarę tworzenia i wdrażania nowych wersji.
Omówienie składnika
Menedżerowie pakietów, tacy jak apt-get , są dobrze znani w świecie systemu Linux, ale nie tyle w świecie systemu Windows. Chocolatey to menedżer pakietów dla systemu Windows. Wpis scotta Hanselmana na blogu o Chocolatey jest świetnym wprowadzeniem. Chocolatey umożliwia używanie wiersza polecenia do instalowania pakietów z centralnego repozytorium w systemie operacyjnym Windows. Możesz utworzyć własne repozytorium i zarządzać nim, a aplikacja Chocolatey może instalować pakiety z dowolnej liczby wyznaczonych repozytoriów.
Rozszerzenie DSC programu PowerShell to narzędzie programu PowerShell, które umożliwia deklarowanie konfiguracji, która ma być odpowiednia dla maszyny. Jeśli na przykład chcesz zainstalować aplikację Chocolatey, zainstalować usługi IIS, otworzyć port 80 i wersję 1.0.0 zainstalowanej witryny internetowej, program DSC Local Configuration Manager (LCM) implementuje tę konfigurację. Serwer ściągania DSC zawiera repozytorium konfiguracji maszyn. Narzędzie LCM na każdej maszynie okresowo sprawdza, czy jego konfiguracja jest zgodna z przechowywaną konfiguracją. Może zgłaszać stan lub próbować przywrócić zgodność maszyny z przechowywaną konfiguracją. Możesz edytować przechowywaną konfigurację na serwerze ściągania, aby spowodować, że maszyna lub zestaw maszyn będą wyrównywanie ze zmienioną konfiguracją.
Zasób DSC to moduł kodu, który ma określone możliwości, takie jak zarządzanie siecią, usługą Active Directory lub programem SQL Server. Zasób DSC chocolatey wie, jak uzyskać dostęp do serwera NuGet, pobrać pakiety, zainstalować pakiety i wykonać inne zadania. Istnieje wiele innych zasobów DSC w Galeria programu PowerShell. Te moduły są instalowane na serwerze ściągania usługi Azure Automation State Configuration do użycia przez konfiguracje.
Szablony usługi Resource Manager zapewniają deklaratywny sposób generowania zasobów dla infrastruktury, takich jak:
- sieci i podsieci
- zabezpieczenia sieci
- Routingu
- moduły równoważenia obciążenia,
- Karty sieciowe, maszyny wirtualne i inne
Aby zapoznać się z porównaniem modelu wdrażania usługi Resource Manager (deklaratywnego) z klasycznym modelem wdrażania platformy Azure (imperatywne), zobacz Azure Resource Manager a wdrożenie klasyczne. Ten artykuł zawiera omówienie podstawowych dostawców zasobów: obliczeń, magazynu i sieci.
Jedną z kluczowych funkcji szablonu usługi Resource Manager jest możliwość zainstalowania rozszerzenia maszyny wirtualnej podczas aprowizacji maszyny wirtualnej. Rozszerzenie maszyny wirtualnej ma określone możliwości, takie jak uruchamianie niestandardowego skryptu, instalowanie oprogramowania antywirusowego i uruchamianie skryptu konfiguracji DSC. Istnieje wiele innych typów rozszerzeń maszyn wirtualnych.
Szybkie poruszanie się po diagramie
Zaczynając od góry, napiszesz kod, skompilujesz go, przetestujesz go, a następnie utworzysz pakiet instalacyjny. Chocolatey może obsługiwać różne typy pakietów instalacyjnych, takich jak MSI, MSU, ZIP. Ponadto masz pełną moc programu PowerShell, aby wykonać rzeczywistą instalację, jeśli natywne możliwości chocolatey'ego nie są do niego. Umieść pakiet w pewnym miejscu dostępny — repozytorium pakietów. Ten przykład użycia używa folderu publicznego na koncie usługi Azure Blob Storage, ale może być w dowolnym miejscu. Chocolatey działa natywnie z serwerami NuGet i kilkoma innymi do zarządzania metadanymi pakietu. W tym artykule opisano opcje. W przykładzie użycia użyto narzędzia NuGet. Nuspec to metadane dotyczące pakietów. Informacje narzędzia Nuspec są kompilowane w narzędziu NuPkg i przechowywane na serwerze NuGet. Gdy konfiguracja żąda pakietu według nazwy i odwołuje się do serwera NuGet, zasób Chocolatey DSC na maszynie wirtualnej pobiera pakiet i instaluje go. Możesz również zażądać określonej wersji pakietu.
W lewym dolnym rogu obrazu znajduje się szablon usługi Azure Resource Manager. W tym przykładzie użycia rozszerzenie maszyny wirtualnej rejestruje maszynę wirtualną przy użyciu serwera ściągania usługi Azure Automation State Configuration jako węzła. Konfiguracja jest przechowywana na serwerze ściągania dwa razy: raz jako zwykły tekst i raz skompilowany jako plik MOF. W witrynie Azure Portal moF reprezentuje konfigurację węzła, a nie prostą konfigurację.
Stosunkowo proste jest utworzenie pakietu Nuspec, skompilowanie go i zapisanie go na serwerze NuGet. Następny krok ciągłego wdrażania wymaga następujących jednorazowych zadań:
- Konfigurowanie serwera ściągania
- Rejestrowanie węzłów na serwerze
- Tworzenie początkowej konfiguracji na serwerze
Podczas uaktualniania i wdrażania pakietów do repozytorium należy odświeżyć konfigurację i konfigurację węzła na serwerze ściągania.
Jeśli nie zaczynasz od szablonu usługi Resource Manager, istnieją polecenia programu PowerShell ułatwiające rejestrowanie maszyn wirtualnych na serwerze ściągania. Aby uzyskać więcej informacji, zobacz Dołączanie maszyn do zarządzania przez usługę Azure Automation State Configuration.
Przykład użycia — informacje
Przykład użycia w tym artykule rozpoczyna się od maszyny wirtualnej z ogólnego obrazu systemu Windows Server 2012 R2 z galerii platformy Azure. Możesz rozpocząć od dowolnego przechowywanego obrazu, a następnie dostosować go za pomocą konfiguracji DSC. Jednak zmiana konfiguracji, która jest gotowa do obrazu, jest znacznie trudniejsza niż dynamiczne aktualizowanie konfiguracji przy użyciu rozszerzenia DSC.
Nie musisz używać szablonu usługi Resource Manager i rozszerzenia maszyny wirtualnej do korzystania z tej techniki z maszynami wirtualnymi. A maszyny wirtualne nie muszą znajdować się na platformie Azure, aby zarządzać dyskami CD. Wystarczy zainstalować aplikację Chocolatey i skonfigurować narzędzie LCM na maszynie wirtualnej, aby wiedzieć, gdzie znajduje się serwer ściągania.
Podczas aktualizowania pakietu na maszynie wirtualnej w środowisku produkcyjnym należy wycofać ją z rotacji podczas instalowania aktualizacji. Sposób, w jaki to robisz, różni się znacznie. Na przykład za maszyną wirtualną za usługą Azure Load Balancer można dodać sondę niestandardową. Podczas aktualizowania maszyny wirtualnej punkt końcowy sondy zwraca wartość 400. Poprawka niezbędna do spowodowania tej zmiany może znajdować się wewnątrz konfiguracji, ponieważ można dostosować ją, aby przełączyć ją z powrotem w celu zwrócenia wartości 200 po zakończeniu aktualizacji.
Pełne źródło dla tego przykładu użycia znajduje się w tym projekcie programu Visual Studio w witrynie GitHub.
Krok 1. Konfigurowanie serwera ściągania i konta usługi Automation
Uruchom następujące polecenia w uwierzytelnionej sesji programu 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
Ten krok trwa kilka minut, gdy serwer ściągania jest skonfigurowany.
Konto usługi Automation można utworzyć w dowolnym z następujących regionów świadczenia usługi Azure:
- Wschodnie stany USA 2
- South Central US
- US Gov Wirginia
- West Europe
- Southeast Asia
- Japonia Wschodnia
- Indie Centralne
- Australia Południowo-Wschodnia
- Kanada Środkowa
- Europa Północna
Krok 2. Dostosowywanie rozszerzenia maszyny wirtualnej do szablonu usługi Resource Manager
Szczegółowe informacje dotyczące rejestracji maszyny wirtualnej (przy użyciu rozszerzenia DSC programu PowerShell) podanego w tym szablonie szybkiego startu platformy Azure. Ten krok powoduje zarejestrowanie nowej maszyny wirtualnej przy użyciu serwera ściągania na liście węzłów konfiguracji stanu. Część tej rejestracji określa konfigurację węzła, która ma zostać zastosowana do węzła. Ta konfiguracja węzła nie musi jeszcze istnieć na serwerze ściągania, ale musisz wybrać nazwę węzła i nazwę konfiguracji. W tym przykładzie węzeł to isvbox
, a nazwa konfiguracji to ISVBoxConfig
. Nazwa konfiguracji węzła określona w pliku DeploymentTemplate.json
to ISVBoxConfig.isvbox
.
Krok 3. Dodawanie wymaganych zasobów DSC do serwera ściągania
Galeria programu PowerShell może instalować zasoby DSC na koncie usługi Azure Automation. Przejdź do żądanego zasobu i wybierz pozycję Wdróż w usłudze Azure Automation.
Inna technika ostatnio dodana do witryny Azure Portal umożliwia ściąganie nowych modułów lub aktualizowanie istniejących modułów. Wybierz ikonę Przeglądaj galerię , aby wyświetlić listę modułów w galerii, przejść do szczegółów i zaimportować je do konta usługi Automation. Ten proces umożliwia aktualizowanie modułów. Ponadto funkcja importowania sprawdza zależności z innymi modułami, aby upewnić się, że nic nie zostanie zsynchronizowane.
Istnieje również podejście ręczne, używane tylko raz na zasób, chyba że chcesz go uaktualnić później. Aby uzyskać więcej informacji na temat tworzenia modułów integracji programu PowerShell, zobacz Tworzenie modułów integracji dla usługi Azure Automation.
Uwaga
Struktura folderów modułu integracji programu PowerShell dla komputera z systemem Windows różni się nieco od struktury folderów oczekiwanej przez usługę Azure Automation.
Zainstaluj program Windows Management Framework w wersji 5 (nie jest wymagany dla systemu Windows 10).
Zainstaluj moduł integracji.
Install-Module -Name MODULE-NAME` <—grabs the module from the PowerShell Gallery
Skopiuj folder modułu z
C:\Program Files\WindowsPowerShell\Modules\MODULE-NAME
do folderu tymczasowego.Usuń przykłady i dokumentację z folderu głównego.
Spakuj folder główny, nazewając plik ZIP o nazwie folderu.
Umieść plik ZIP w dostępnej lokalizacji HTTP, takiej jak magazyn obiektów blob na koncie usługi Azure Storage.
Uruchom następujące polecenie.
$newAzAutomationModuleSplat = @{ ResourceGroupName = 'MY-AUTOMATION-RG' AutomationAccountName = 'MY-AUTOMATION-ACCOUNT' Name = 'MODULE-NAME' ContentLinkUri = 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip' } New-AzAutomationModule @newAzAutomationModuleSplat
Dołączony przykład implementuje te kroki dla rozwiązań cChoco i xNetworking.
Krok 4. Dodawanie konfiguracji węzła do serwera ściągania
Podczas pierwszego importowania konfiguracji do serwera ściągania i kompilowania nie ma żadnych specjalnych informacji. Wszystkie późniejsze importy lub kompilacje tej samej konfiguracji wyglądają dokładnie tak samo. Za każdym razem, gdy aktualizujesz pakiet i musisz wypchnąć go do środowiska produkcyjnego, należy wykonać ten krok po upewnieniu się, że plik konfiguracji jest poprawny — łącznie z nową wersją pakietu. Oto plik ISVBoxConfig.ps1
konfiguracji:
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
Następujący skrypt został zmodyfikowany w celu użycia modułu Az programu 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
Krok 5. Tworzenie i obsługa metadanych pakietu
Dla każdego pakietu umieszczonego w repozytorium pakietów potrzebny jest pakiet Nuspec, który go opisuje. Należy go skompilować i przechowywać na serwerze NuGet. Aby uzyskać więcej informacji, zobacz [Tworzenie pakietu NuGet przy użyciu interfejsu wiersza polecenia nuget.exe].
Można użyć MyGet.org jako serwera NuGet. Możesz kupić tę usługę, ale to bezpłatna jednostka SKU starter. Aby uzyskać instrukcje dotyczące instalowania własnego serwera NuGet dla pakietów prywatnych, zobacz dokumentację dotyczącą Nuget.org.
Krok 6. Związać to wszystko razem
Za każdym razem, gdy wersja przechodzi kontrolę jakości i jest zatwierdzona do wdrożenia, pakiet jest tworzony, a pakiet nuspec i nupkg są aktualizowane i wdrażane na serwerze NuGet. Należy zaktualizować konfigurację (krok 4) przy użyciu nowego numeru wersji. Następnie wyślij go do serwera ściągania i skompiluj go.
Od tego momentu należy do maszyn wirtualnych, które zależą od tej konfiguracji, aby ściągnąć aktualizację i zainstalować ją. Każda z tych aktualizacji jest prosta — tylko wiersz lub dwa programu PowerShell. W przypadku usługi Azure DevOps niektóre z nich są hermetyzowane w zadaniach kompilacji, które można połączyć ze sobą w kompilacji. Ten artykuł zawiera więcej szczegółów. To repozytorium GitHub zawiera szczegółowe informacje o dostępnych zadaniach kompilacji.
Powiązane artykuły
- Omówienie usługi Azure Automation DSC
- Dołączanie maszyn do zarządzania przez usługę Azure Automation DSC
Następne kroki
- Aby zapoznać się z omówieniem, zobacz Omówienie usługi Azure Automation State Configuration.
- Aby rozpocząć korzystanie z tej funkcji, zobacz Wprowadzenie do usługi Azure Automation State Configuration.
- Aby dowiedzieć się więcej o kompilowaniu konfiguracji DSC w celu przypisania ich do węzłów docelowych, zobacz Kompilowanie konfiguracji DSC w usłudze Azure Automation State Configuration.
- Aby zapoznać się z dokumentacją poleceń cmdlet programu PowerShell, zobacz Az.Automation.
- Aby uzyskać informacje o cenach, zobacz Cennik usługi Azure Automation State Configuration.