Menyiapkan penyebaran berkelanjutan dengan Chocolatey

Catatan

Sebelum Anda mengaktifkan Konfigurasi Status Automation, kami ingin Anda mengetahui bahwa versi DSC yang lebih baru sekarang tersedia secara umum, dikelola oleh fitur Azure Policy bernama konfigurasi tamu. Layanan konfigurasi tamu menggabungkan fitur Ekstensi DSC, Konfigurasi Status Azure Automation, dan fitur yang paling sering diminta dari umpan balik pelanggan. Konfigurasi tamu juga mencakup dukungan komputer hibrid melalui server berkemampuan Arc.

Di dunia Azure DevOps, ada banyak alat untuk membantu terhadap berbagai titik dalam alur integrasi berkelanjutan. Konfigurasi Status Azure Automation adalah tambahan baru yang disambut baik untuk opsi yang dapat diterapkan oleh tim DevOps.

Azure Automation adalah layanan terkelola di Microsoft Azure yang memungkinkan Anda mengotomatiskan berbagai tugas menggunakan runbook, simpul, dan sumber daya bersama, seperti informasi masuk, jadwal, dan variabel global. Konfigurasi Status Azure Automation mengembangkan kemampuan automasi ini dengan menyertakan alat Konfigurasi Status yang Diinginkan (DSC). Berikut adalah ringkasan yang bagus.

Artikel ini menunjukkan cara menyiapkan Penyebaran Berkelanjutan (CD) untuk komputer Windows. Anda dapat dengan mudah mengembangkan teknik untuk memasukkan komputer Windows sebanyak yang diperlukan dalam peran tersebut, misalnya, situs web, dan beralih dari sana ke peran tambahan.

Continuous Deployment for IaaS VMs

Pada tingkat tinggi

Ada banyak hal yang berlangsung di sini, tetapi untungnya dapat dipecah menjadi dua proses utama:

  • Menulis kode dan mengujinya, lalu membuat dan menerbitkan paket penginstalan untuk versi utama dan kecil dari sistem.
  • Membuat dan mengelola VM yang memasang dan menjalankan kode dalam paket.

Setelah kedua proses inti ini diberlakukan, mudah untuk memperbarui paket secara otomatis pada VM Anda saat versi baru dibuat dan disebarkan.

Gambaran umum komponen

Manajer paket seperti apt-get terkenal di dunia Linux, tetapi tidak terlalu terkenal di dunia Windows. Chocolatey adalah salah satunya, dan blog Scott Hanselman tentang topik ini merupakan pengantar yang bagus. Singkatnya, Chocolatey memungkinkan Anda menggunakan baris perintah untuk memasang paket dari repositori pusat ke sistem operasi Windows. Anda dapat membuat dan mengelola repositori Anda sendiri, dan Chocolatey dapat memasang paket dari sejumlah repositori yang Anda tetapkan.

PowerShell DSC adalah alat PowerShell yang memungkinkan Anda menyatakan konfigurasi yang Anda inginkan untuk komputer. Misalnya, jika Anda ingin Chocolatey dipasang, IIS dipasang, port 80 dibuka, dan versi 1.0.0 dari situs web Anda dipasang, DSC Configuration Manager Lokal (LCM) mengimplementasikan konfigurasi tersebut. Server penarikan DSC menyimpan repositori konfigurasi untuk komputer Anda. LCM pada setiap komputer memeriksa secara berkala untuk melihat apakah konfigurasinya cocok dengan konfigurasi yang disimpan. Ini dapat melaporkan status atau mencoba membawa komputer kembali ke penyelarasan dengan konfigurasi yang disimpan. Anda dapat mengedit konfigurasi yang disimpan di server penarikan agar komputer atau serangkaian komputer selaras dengan konfigurasi yang diubah.

Sumber daya DSC adalah modul kode yang memiliki kemampuan khusus, seperti mengelola jaringan, Direktori Aktif, atau SQL Server. Sumber Daya DSC Chocolatey tahu cara mengakses Server NuGet (antara lain), mengunduh paket, memasang paket, dan sebagainya. Ada banyak Sumber Daya DSC lainnya di Galeri PowerShell. Anda memasang modul tersebut di server penarikan Konfigurasi Status Azure Automation untuk digunakan oleh konfigurasi Anda.

Templat Resource Manager menyediakan cara deklaratif untuk menghasilkan infrastruktur Anda, misalnya, jaringan, subnet, keamanan dan perutean jaringan, penyeimbang beban, NIC, VM, dan sebagainya. Berikut adalah artikel yang membandingkan model penyebaran Resource Manager (deklaratif) dengan model penyebaran Azure Service Management (ASM atau klasik) (imperatif). Artikel ini berisi pembahasan tentang penyedia sumber daya inti: komputasi, penyimpanan, dan jaringan.

Salah satu fitur utama dari template Resource Manager adalah kemampuannya untuk memasang ekstensi VM ke VM saat disediakan. Ekstensi VM memiliki kemampuan khusus, seperti menjalankan skrip kustom, memasang perangkat lunak anti-virus, dan menjalankan skrip konfigurasi DSC. Ada banyak jenis ekstensi VM lainnya.

Perjalanan cepat di sekitar diagram

Mulai dari atas, Anda menulis kode Anda, membangunnya, mengujinya, lalu membuat paket penginstalan. Chocolatey dapat menangani berbagai jenis paket penginstalan, seperti MSI, MSU, ZIP. Dan Anda memiliki kekuatan penuh PowerShell untuk melakukan penginstalan aktual jika kemampuan asli Chocolatey tidak memadai. Masukkan paket ke tempat yang dapat dijangkau - repositori paket. Contoh penggunaan ini menggunakan folder publik di akun penyimpanan blob Azure, tetapi bisa di mana saja. Chocolatey bekerja secara native dengan server NuGet dan beberapa server lainnya untuk manajemen metadata paket. Artikel ini menjelaskan opsinya. Contoh penggunaan menggunakan NuGet. Nuspec adalah metadata terhadap paket Anda. Informasi Nuspec dikompilasi ke dalam NuPkg dan disimpan di server NuGet. Ketika konfigurasi Anda meminta paket berdasarkan nama dan mereferensikan server NuGet, sumber daya Chocolatey DSC pada VM mengambil paket dan memasangnya. Anda juga dapat meminta versi paket tertentu.

Di kiri bawah gambar, ada templat Azure Resource Manager. Dalam contoh penggunaan ini, ekstensi VM mendaftarkan VM dengan server penarikan Konfigurasi Status Azure Automation sebagai simpul. Konfigurasi disimpan di server penarikan dua kali: satu kali sebagai teks biasa dan satu kali dikompilasi sebagai file MOF. Di portal Microsoft Azure, MOF merepresentasikan konfigurasi simpul, dibandingkan dengan konfigurasi sederhana. Ini adalah artefak yang terkait dengan simpul sehingga simpul akan mengetahui konfigurasinya. Detail di bawah ini menunjukkan cara menetapkan konfigurasi simpul ke simpul.

Membuat Nuspec, menyusunnya, dan menyimpannya di server NuGet adalah hal yang mudah. Dan Anda sudah mengelola VM.

Mengambil langkah selanjutnya untuk penyebaran berkelanjutan memerlukan pengaturan server penarikan satu kali, mendaftarkan simpul Anda dengannya satu kali, dan membuat serta menyimpan konfigurasi awal di server. Ketika paket ditingkatkan dan disebarkan ke repositori, Anda hanya perlu menyegarkan konfigurasi dan konfigurasi simpul di server penarikan sesuai kebutuhan.

Jika Anda tidak memulai dengan templat Resource Manager, tidak masalah. Ada perintah PowerShell yang akan membantu Anda mendaftarkan VM dengan server penarikan. Untuk informasi selengkapnya, lihat Onboarding komputer untuk manajemen berdasarkan Konfigurasi Status Azure Automation.

Tentang contoh penggunaan

Contoh penggunaan dalam artikel ini dimulai dengan VM dari gambar Windows Server 2012 R2 generik dari galeri Azure. Anda dapat memulai dari gambar yang disimpan dan kemudian mengubah dari sana dengan konfigurasi DSC. Namun, mengubah konfigurasi yang dimasukkan ke dalam gambar jauh lebih sulit daripada memperbarui konfigurasi secara dinamis menggunakan DSC.

Anda tidak perlu menggunakan template Resource Manager dan ekstensi VM untuk menggunakan teknik ini dengan VM Anda. Dan VM Anda tidak harus berada di Azure untuk berada di manajemen CD. Semua yang diperlukan adalah bahwa Chocolatey dipasang dan LCM dikonfigurasikan pada VM sehingga mengetahui di mana server penarik berada.

Saat Anda memperbarui paket pada VM yang sedang diproduksi, Anda perlu mengeluarkan VM tersebut dari rotasi saat pembaruan dipasang. Cara melakukan ini sangat beragam. Misalnya, dengan VM di belakang Azure Load Balancer, Anda dapat menambahkan Probe Kustom. Saat memperbarui VM, minta endpoint titik akhir probe mengembalikan 400. Tweak yang diperlukan untuk perubahan ini dapat berada di dalam konfigurasi Anda, seperti halnya tweak untuk mengubahnya kembali ke mengembalikan 200 setelah pembaruan selesai.

Sumber lengkap untuk contoh penggunaan ini ada di proyek Visual Studio ini di GitHub.

Langkah 1: Siapkan server penarikan dan akun Automation

Di baris perintah (Connect-AzAccount) PowerShell yang diautentikasi: (dapat memakan waktu beberapa menit saat server penarikan disiapkan)

New-AzResourceGroup -Name MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES
New-AzAutomationAccount -ResourceGroupName MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES -Name MY-AUTOMATION-ACCOUNT

Anda dapat memasukkan akun Automation ke salah satu wilayah berikut (juga disebut sebagai lokasi): US Timur 2, US Selatan Tengah, US Gov Virginia, Eropa Barat, Asia Tenggara, Jepang Timur, India Tengah dan Australia Tenggara, Kanada Tengah, Eropa Utara.

Langkah 2: Buat tweak ekstensi VM ke templat Resource Manager

Detail untuk pendaftaran VM (menggunakan ekstensi VM DSC PowerShell) yang disediakan dalam Templat Mulai Cepat Azure ini. Langkah ini mendaftarkan VM baru Anda dengan server penarikan dalam daftar Simpul Konfigurasi Negara. Bagian dari pendaftaran ini menentukan konfigurasi simpul yang akan diterapkan ke simpul. Konfigurasi simpul ini belum wajib ada di server penarikan, jadi tidak masalah jika langkah 4 dilakukan untuk pertama kali. Namun, di Langkah 2 ini, Anda perlu memutuskan nama simpul dan nama konfigurasi. Dalam contoh penggunaan ini, simpul adalah 'isvbox' dan konfigurasinya adalah 'ISVBoxConfig'. Jadi, nama konfigurasi simpul (yang akan ditentukan dalam DeploymentTemplate.js) adalah 'ISVBoxConfig.isvbox'.

Langkah 3: Tambahkan sumber daya DSC yang diperlukan ke server penarikan

Galeri PowerShell diinstrumentasi untuk memasang sumber daya DSC ke akun Azure Automation Anda. Arahkan ke sumber daya yang Anda inginkan, lalu klik tombol "Sebarkan ke Azure Automation".

PowerShell Gallery example

Teknik lain yang baru-baru ini ditambahkan ke portal Microsoft Azure memungkinkan Anda untuk menarik modul baru atau memperbarui modul yang ada. Klik sumber daya akun Automation, petak peta Aset, dan akhirnya petak peta Modul. Ikon Telusuri Galeri memungkinkan Anda melihat daftar modul di galeri, menelusuri detail dan akhirnya mengimpor ke akun Automation Anda. Ini adalah cara yang bagus untuk menjaga modul Anda tetap diperbarui dari waktu ke waktu. Dan, fitur impor memeriksa dependensi dengan modul lain untuk memastikan tidak ada yang tidak sinkron.

Ada juga pendekatan manual, hanya digunakan sekali per sumber daya, kecuali Jika Anda ingin meningkatkannya nanti. Untuk informasi selengkapnya tentang penulisan modul integrasi PowerShell, lihat Menulis Modul Integrasi untuk Azure Automation.

Catatan

Struktur folder modul integrasi PowerShell untuk komputer Windows sedikit berbeda dengan struktur folder yang diharapkan oleh Azure Automation.

  1. Pasang Windows Management Framework v5 (tidak diperlukan untuk Windows 10).

  2. Instal modul integrasi.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. Salin folder modul dari c:\Program Files\WindowsPowerShell\Modules\MODULE-NAME ke folder sementara.

  4. Hapus sampel dan dokumentasi dari folder utama.

  5. Zip folder utama, beri nama file ZIP dengan nama foldernya.

  6. Masukkan file ZIP ke lokasi HTTP yang dapat dijangkau, seperti penyimpanan blob di akun Azure Storage.

  7. Jalankan perintah berikut.

    New-AzAutomationModule `
      -ResourceGroupName MY-AUTOMATION-RG -AutomationAccountName MY-AUTOMATION-ACCOUNT `
      -Name MODULE-NAME -ContentLinkUri 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip'
    

Contoh yang disertakan mengimplementasikan langkah-langkah ini untuk cChoco dan xNetworking.

Langkah 4: Tambahkan konfigurasi simpul ke server penarikan

Tidak ada yang khusus saat Anda pertama kali mengimpor konfigurasi ke server penarikan dan kompilasi. Semua impor atau kompilasi selanjutnya dari konfigurasi yang sama akan terlihat sama persis. Setiap kali memperbarui paket dan perlu mengirimkannya ke produksi, Anda melakukan langkah ini setelah memastikan file konfigurasi sudah benar - termasuk versi baru dari paket Anda. Berikut adalah konfigurasi file 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'
        }
    }
}

Berikut adalah skripNew-ConfigurationScript.ps1 (dimodifikasi untuk menggunakan modul Az):

Import-AzAutomationDscConfiguration `
    -ResourceGroupName MY-AUTOMATION-RG -AutomationAccountName MY-AUTOMATION-ACCOUNT `
    -SourcePath C:\temp\AzureAutomationDsc\ISVBoxConfig.ps1 `
    -Published -Force

$jobData = Start-AzAutomationDscCompilationJob `
    -ResourceGroupName MY-AUTOMATION-RG -AutomationAccountName MY-AUTOMATION-ACCOUNT `
    -ConfigurationName ISVBoxConfig

$compilationJobId = $jobData.Id

Get-AzAutomationDscCompilationJob `
    -ResourceGroupName MY-AUTOMATION-RG -AutomationAccountName MY-AUTOMATION-ACCOUNT `
    -Id $compilationJobId

Langkah-langkah tersebut menghasilkan konfigurasi simpul baru bernama ISVBoxConfig.isvbox yang ditempatkan di server penarikan. Nama konfigurasi simpul dibangun sebagai configurationName.nodeName.

Langkah 5: Buat dan pertahankan metadata paket

Untuk setiap paket yang dimasukkan ke dalam repositori paket, Anda memerlukan Nuspec yang mendeskripsikannya. Ini harus dikompilasi dan disimpan di server NuGet Anda. Proses ini dijelaskan di sini.

Anda dapat menggunakan MyGet.org sebagai server NuGet. Anda dapat membeli layanan ini, tetapi ada SKU starter gratis. Di NuGet, Anda akan menemukan instruksi tentang penginstalan server NuGet Anda sendiri untuk paket privat Anda.

Langkah 6: Satukan semuanya

Setiap kali versi lulus QA dan disetujui untuk penyebaran, paket dibuat, dan nuspec serta nupkg diperbarui dan disebarkan ke server NuGet. Konfigurasi (langkah 4) juga harus diperbarui untuk menyetujui nomor versi baru. Kemudian harus dikirim ke server penarikan dan dikompilasi.

Sejak saat itu, VM bergantung pada konfigurasi tersebut untuk menarik pembaruan dan memasangnya. Masing-masing pembaruan ini sederhana - hanya satu atau dua baris PowerShell. Untuk Azure DevOps, beberapa di antaranya dienkapsulasi dalam tugas build yang dapat dirantai bersama dalam sebuah build. Artikel ini menyediakan detail selengkapnya. Repositori GitHub ini menyediakan detail tugas build yang tersedia.

Langkah berikutnya