Aracılığıyla paylaş


Chocolatey ile sürekli dağıtım ayarlama

Not

Azure Otomasyonu State Configuration 30 Eylül 2027'de kullanımdan kaldırılacak, lütfen Bu tarihe kadar Azure Makine Yapılandırması. Daha fazla bilgi için blog gönderisi duyurusunu inceleyin. Azure Machine Configuration hizmeti DSC Uzantısı, Azure Otomasyonu Durum Yapılandırması özelliklerini ve müşteri geri bildirimlerinden en sık istenen özellikleri birleştirir. Azure Makine Yapılandırması, Arc özellikli sunucular aracılığıyla karma makine desteği de içerir.

Dikkat

Linux için Azure Otomasyonu DSC, 30 Eylül 2023'te kullanımdan kaldırılmıştır. Daha fazla bilgi için duyuruya bakın.

DevOps dünyasında, sürekli tümleştirme işlem hattındaki çeşitli noktalarda yardımcı olacak birçok araç vardır. Azure Otomasyonu Durum Yapılandırması, DevOps ekiplerinin kullanabileceği seçeneklere yeni bir eklemedir.

Azure Otomasyonu, Microsoft Azure'da runbook'ları, düğümleri ve kimlik bilgileri, zamanlamalar ve genel değişkenler gibi paylaşılan kaynakları kullanarak çeşitli görevleri otomatikleştirmenizi sağlayan yönetilen bir hizmettir. Azure Otomasyonu Durum Yapılandırması, bu otomasyon özelliğini PowerShell İstenen Durum Yapılandırması (DSC) araçlarını içerecek şekilde genişletir. İşte harika bir genel bakış.

Bu makalede, bir Windows bilgisayarı için Sürekli Dağıtımın (CD) nasıl ayarlanacağı gösterilmektedir. Tekniği kolayca, role gereken sayıda Windows bilgisayarı (örneğin, bir web sitesi) içerecek şekilde genişletebilir ve oradan daha fazla role gidebilirsiniz.

IaaS VM'leri için Sürekli Dağıtım

Yüksek düzeyde

Burada oldukça fazla şey oluyor, ancak neyse ki iki ana işleme ayrılabilir:

  • Kod yazma ve test etme, ardından sistemin ana ve ikincil sürümleri için yükleme paketleri oluşturma ve yayımlama.
  • Paketlerde kodu yükleyen ve yürüten VM'leri oluşturma ve yönetme.

Bu temel işlemlerin her ikisi de gerçekleştikten sonra, yeni sürümler oluşturulur ve dağıtılırken vm'lerinizdeki paketi otomatik olarak güncelleştirmek kolaydır.

Bileşene genel bakış

apt-get gibi paket yöneticileri Linux dünyasında iyi bilinir, ancak Windows dünyasında çok fazla bilinmez. Chocolatey , Windows için bir paket yöneticisidir. Scott Hanselman'ın Chocolatey hakkındaki blog gönderisi harika bir giriş. Chocolatey, merkezi bir depodaki paketleri Windows işletim sistemine yüklemek için komut satırını kullanmanıza olanak tanır. Kendi deponuzu oluşturup yönetebilirsiniz ve Chocolatey belirlediğiniz herhangi bir sayıda depodan paket yükleyebilir.

PowerShell DSC , bir makine için istediğiniz yapılandırmayı bildirmenizi sağlayan bir PowerShell aracıdır. Örneğin Chocolatey'nin yüklenmesini, IIS'nin yüklenmesini, 80 numaralı bağlantı noktasının açılmasını ve web sitenizin 1.0.0 sürümünün yüklenmesini istiyorsanız DSC Local Configuration Manager (LCM) bu yapılandırmayı uygular. DSC çekme sunucusu, makineleriniz için bir yapılandırma deposu içerir. Her makinedeki LCM, yapılandırmasının depolanan yapılandırmayla eşleşip eşleşmediğini görmek için düzenli aralıklarla iade eder. Durumu bildirebilir veya makineyi depolanan yapılandırmayla uyumlu hale getirmeye çalışır. Bir makinenin veya makine kümesinin değiştirilen yapılandırmayla uyumlu hale gelmesini sağlamak için çekme sunucusunda depolanan yapılandırmayı düzenleyebilirsiniz.

DSC kaynağı, ağ yönetimi, Active Directory veya SQL Server gibi belirli özelliklere sahip bir kod modülüdür. Chocolatey DSC Kaynağı NuGet Sunucusuna erişmeyi, paketleri indirmeyi, paketleri yüklemeyi ve diğer görevleri gerçekleştirmeyi bilir. PowerShell Galerisi birçok DSC Kaynağı daha vardır. Bu modülleri yapılandırmalarınız tarafından kullanılmak üzere Azure Otomasyonu Durum Yapılandırması çekme sunucunuza yüklersiniz.

Resource Manager şablonları, altyapınız için aşağıdakiler gibi bildirim temelli bir kaynak oluşturma yöntemi sağlar:

  • ağlar ve alt ağlar
  • ağ güvenliği
  • Yönlendirme
  • yük dengeleyiciler,
  • NIC'ler, VM'ler ve diğerleri

Resource Manager dağıtım modelinin (bildirim temelli) Azure klasik dağıtım modeliyle (kesinlik temelli) karşılaştırması için bkz . Azure Resource Manager ile klasik dağıtım karşılaştırması. Bu makale temel kaynak sağlayıcılarının bir tartışmasını içerir: işlem, depolama ve ağ.

Resource Manager şablonunun önemli özelliklerinden biri, VM sağlama sırasında bir VM uzantısı yükleyebilmesidir. VM uzantısı, özel betik çalıştırma, virüsten koruma yazılımı yükleme ve DSC yapılandırma betiği çalıştırma gibi belirli özelliklere sahiptir. Başka birçok vm uzantısı türü vardır.

Diyagramda hızlı gezi

En üstten başlayarak kodunuzu yazar, derler, test eder ve ardından bir yükleme paketi oluşturursunuz. Chocolatey, MSI, MSU, ZIP gibi çeşitli yükleme paketlerini işleyebilir. Ayrıca, Chocolatey'nin yerel özellikleri buna bağlı değilse gerçek yüklemeyi yapmak için PowerShell'in tüm gücüne sahip olursunuz. Paketi ulaşılabilen bir yere ( bir paket deposu) yerleştirin. Bu kullanım örneği, Azure blob depolama hesabındaki bir ortak klasörü kullanır, ancak her yerde olabilir. Chocolatey, paket meta verilerinin yönetimi için NuGet sunucuları ve birkaç diğer sunucuyla yerel olarak çalışır. Bu makalede seçenekler açıklanmaktadır. Kullanım örneği NuGet kullanır. Nuspec, paketlerinizle ilgili meta verilerdir. Nuspec bilgileri bir NuPkg içinde derlenip bir NuGet sunucusunda depolanır. Yapılandırmanız ada göre bir paket istediğinde ve bir NuGet sunucusuna başvurduğunda, VM'de Chocolatey DSC kaynağı paketi alır ve yükler. Paketin belirli bir sürümünü de isteyebilirsiniz.

Resmin sol alt kısmında bir Azure Resource Manager şablonu vardır. Bu kullanım örneğinde, VM uzantısı VM'yi Azure Otomasyonu Durum Yapılandırması çekme sunucusuna düğüm olarak kaydeder. Yapılandırma, çekme sunucusunda iki kez depolanır: bir kez düz metin olarak ve bir kez MOF dosyası olarak derlenmiştir. Azure portalında MOF, basit bir yapılandırmanın aksine bir düğüm yapılandırmasını temsil eder.

Nuspec'i oluşturmak, derlemek ve bir NuGet sunucusunda depolamak oldukça basittir. Sürekli dağıtıma yönelik bir sonraki adım aşağıdaki tek seferlik görevleri gerektirir:

  • Çekme sunucusunu ayarlama
  • Düğümlerinizi sunucuya kaydetme
  • Sunucuda ilk yapılandırmayı oluşturma

Yalnızca paketleri depoya yükseltip dağıtırken çekme sunucusundaki yapılandırmayı ve düğüm yapılandırmasını yenilemeniz gerekir.

Resource Manager şablonuyla başlamıyorsanız, VM'lerinizi çekme sunucusuna kaydetmenize yardımcı olacak PowerShell komutları vardır. Daha fazla bilgi için bkz. Azure Otomasyonu Durum Yapılandırmasına göre yönetim için makineleri ekleme.

Kullanım örneği hakkında

Bu makaledeki kullanım örneği, Azure galerisindeki genel bir Windows Server 2012 R2 görüntüsünden bir VM ile başlar. Depolanan herhangi bir görüntüden başlayabilir ve ardından DSC yapılandırmasıyla buradan ince ayar yapabilirsiniz. Ancak, bir görüntüde pişirilen yapılandırmayı değiştirmek, DSC kullanarak yapılandırmayı dinamik olarak güncelleştirmekten çok daha zordur.

Bu tekniği VM'lerinizle kullanmak için Resource Manager şablonu ve VM uzantısı kullanmanız gerekmez. AYRıCA VM'lerinizin CD yönetimi altında olması için Azure'da olması gerekmez. Chocolatey'yi yükleyin ve çekme sunucusunun nerede olduğunu bilmesi için VM'de LCM'yi yapılandırın.

Üretimde olan bir VM'deki bir paketi güncelleştirdiğinizde, güncelleştirme yüklenirken bu VM'yi döngüden çıkarmanız gerekir. Bunu nasıl yaptığınız büyük ölçüde değişir. Örneğin, Azure Load Balancer'ın arkasında bir VM ile Özel Yoklama ekleyebilirsiniz. VM'yi güncelleştirirken yoklama uç noktasının 400 döndürmesini sağlayın. Bu değişikliğe neden olmak için gereken ince ayar yapılandırmanızın içinde olabilir ve güncelleştirme tamamlandıktan sonra 200 döndüren ince ayar da yapılandırmanızda olabilir.

Bu kullanım örneğinin tam kaynağı GitHub'daki bu Visual Studio projesindedir .

1. Adım: Çekme sunucusunu ve Otomasyon hesabını ayarlama

Kimliği doğrulanmış (Connect-AzAccount) bir PowerShell oturumunda aşağıdaki komutları çalıştırın:

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

Çekme sunucusu ayarlanırken bu adım birkaç dakika sürer.

Otomasyon hesabınızı aşağıdaki Azure bölgelerinden herhangi birinde oluşturabilirsiniz:

  • Doğu ABD 2
  • Orta Güney ABD
  • US Gov Virginia
  • West Europe
  • Güneydoğu Asya
  • Doğu Japonya
  • Orta Hindistan
  • Güneydoğu Avustralya
  • Orta Kanada
  • Kuzey Avrupa

2. Adım: Resource Manager şablonunda VM uzantısı ayarlamaları yapma

Bu Azure Hızlı Başlangıç Şablonu'nda sağlanan VM kaydı (PowerShell DSC VM uzantısı kullanılarak) için ayrıntılar. Bu adım, yeni VM'nizi Durum Yapılandırma Düğümleri listesindeki çekme sunucusuna kaydeder. Bu kaydın bir parçası, düğüme uygulanacak düğüm yapılandırmasını belirtmektir. Bu düğüm yapılandırmasının çekme sunucusunda henüz mevcut olması gerekmez, ancak düğümün adını ve yapılandırmanın adını seçmeniz gerekir. Bu örnekte düğüm, isvbox yapılandırma adı ise şeklindedir ISVBoxConfig. içinde DeploymentTemplate.json belirttiğiniz düğüm yapılandırma adı şeklindedir ISVBoxConfig.isvbox.

3. Adım: Çekme sunucusuna gerekli DSC kaynaklarını ekleme

PowerShell Galerisi DSC kaynaklarını Azure Otomasyonu hesabınıza yükleyebilir. İstediğiniz kaynağa gidin ve Azure Otomasyonu dağıt'ı seçin.

PowerShell Galerisi örnek

Kısa süre önce Azure portalına eklenen başka bir teknik, yeni modülleri çekmenize veya mevcut modülleri güncelleştirmenize olanak tanır. Galerideki modüllerin listesini görmek, ayrıntıları detaya gitmek ve Otomasyon hesabınıza aktarmak için Galeriye Gözat simgesini seçin. Modüllerinizi güncel tutmak için bu işlemi kullanabilirsiniz. Ayrıca içeri aktarma özelliği, hiçbir şeyin eşitlenmediğinden emin olmak için diğer modüllerle bağımlılıkları denetler.

Ayrıca, daha sonra yükseltmek istemediğiniz sürece kaynak başına yalnızca bir kez kullanılan el ile bir yaklaşım da vardır. PowerShell tümleştirme modülleri yazma hakkında daha fazla bilgi için bkz. Azure Otomasyonu için Tümleştirme Modülleri Yazma.

Not

Bir Windows bilgisayarı için PowerShell tümleştirme modülünün klasör yapısı, Azure Otomasyonu tarafından beklenen klasör yapısından biraz farklıdır.

  1. Windows Management Framework v5'i yükleyin (Windows 10 için gerekli değildir).

  2. Tümleştirme modülünü yükleyin.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. modül klasörünü içinden C:\Program Files\WindowsPowerShell\Modules\MODULE-NAME geçici bir klasöre kopyalayın.

  4. Örnekleri ve belgeleri ana klasörden silin.

  5. Zip dosyasını klasörün adıyla adlandırarak ana klasörü sıkıştırın.

  6. ZIP dosyasını bir Azure Depolama hesabındaki blob depolama gibi erişilebilir bir HTTP konumuna yerleştirin.

  7. Aşağıdaki komutu çalıştırın.

    $newAzAutomationModuleSplat = @{
        ResourceGroupName = 'MY-AUTOMATION-RG'
        AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
        Name = 'MODULE-NAME'
        ContentLinkUri = 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip'
    }
    New-AzAutomationModule @newAzAutomationModuleSplat
    

Dahil edilen örnek cChoco ve xNetworking için bu adımları uygular.

4. Adım: Düğüm yapılandırmasını çekme sunucusuna ekleme

Yapılandırmanızı çekme sunucusuna ilk kez içeri aktardığınızda ve derlediğinizde özel bir şey yoktur. Aynı yapılandırmanın sonraki tüm içeri aktarmaları veya derlemeleri tam olarak aynı görünür. Paketinizi her güncelleştirdiğinizde ve üretime göndermeniz gerektiğinde, yapılandırma dosyasının doğru olduğundan emin olduktan sonra (paketinizin yeni sürümü dahil) bu adımı gerçekleştirirsiniz. Yapılandırma dosyası ISVBoxConfig.ps1şu şekildedir:

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'
        }
    }
}

Aşağıdaki New-ConfigurationScript.ps1 betik Az PowerShell modülünü kullanacak şekilde değiştirildi:

$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. Adım: Paket meta verilerini oluşturma ve koruma

Paket deposuna yerleştirdiğiniz her paket için bunu açıklayan bir Nuspec gerekir. NuGet sunucunuzda derlenmiş ve depolanmalıdır. Daha fazla bilgi için bkz . [nuget.exe CLI kullanarak NuGet paketi oluşturma].

MyGet.org NuGet sunucusu olarak kullanabilirsiniz. Bu hizmeti satın alabilirsiniz, ancak ücretsiz bir başlangıç SKU'susunuz. Özel paketleriniz için kendi NuGet sunucunuzu yükleme yönergeleri için Nuget.org belgelerine bakın.

6. Adım: Hepsini birbirine bağlayın

Bir sürüm Soru-Cevap'ı her geçtiğinde ve dağıtım için onaylandığında paket oluşturulur ve nuspec ve nupkg güncelleştirilip NuGet sunucusuna dağıtılır. Yapılandırmayı (4. adım) yeni sürüm numarasıyla güncelleştirmeniz gerekir. Ardından, çekme sunucusuna gönderin ve derleyin.

Bu noktadan sonra, güncelleştirmeyi çekmek ve yüklemek bu yapılandırmaya bağlı olan VM'lere bağlıdır. Bu güncelleştirmelerin her biri basittir; yalnızca bir veya iki PowerShell satırı. Azure DevOps için, bazıları derlemede zincirleyebileceğiniz derleme görevlerinde kapsüllenir. Bu makalede daha fazla ayrıntı sağlanır. Bu GitHub deposu , kullanılabilir derleme görevlerinin ayrıntılarını içerir.

Sonraki adımlar