Baru-baru ini, saya menemukan binatang yang tidak begitu populer di dunia DevOps, pipa saluran Azure DevOps. Segera saya merasakan tidak adanya instruksi atau artikel yang jelas tentang topik tersebut, saya tidak tahu apa hubungannya, tetapi Microsoft jelas memiliki sesuatu untuk dikerjakan dalam hal mempopulerkan alat. Hari ini kami akan membangun jalur pipa untuk pengujian otomatis di dalam cloud Azure.
Jadi, tugasnya:
Ada perangkat lunak yang dibangun dengan Azure DevOps yang sama, dirakit dari sebuah proyek di WIX. Jika ada minat, saya akan menulis tentang alat ini. Sebenarnya, ini adalah cara yang lebih otomatis untuk membangun installer Windows, yang menggantikan InstallShield standar. Jadi, perangkat lunak kami berhasil membangun dan menghasilkan artefak, setup.exe tertentu, yang menempatkan aplikasi pada sistem Windows. Penting untuk menempatkan aplikasi ini ke mesin virtual yang mirip dengan prod, menyalin tes otomatis yang disiapkan oleh tim pengujian di sana, menjalankannya dan mengumpulkan hasilnya untuk mempertimbangkan cabang baik atau buruk sebelum penggabungan. Semuanya seperti di GitLab,
hanya melalui ....Sebagai lingkungan virtualisasi tempat kami menjalankan pengujian, kami jelas menggunakan Azure DevTest Labs, entitas dalam langganan Azure, yang dibuat untuk memutar semua jenis omong kosong pengujian di dalamnya untuk mendapatkan uang yang masuk akal.
1. Integrasi Sisi Awan
Pertama, kita perlu mengintegrasikan Laboratorium DevTest kami dengan Azure DevOps, yang untuknya kami membutuhkan beberapa Service Principal, pada dasarnya akun layanan yang memungkinkan Anda untuk pergi ke jaringan pipa di cloud dan membuat / menghapus sumber daya di sana untuk diri kita sendiri.
Buka langganan dan temukan layanan Azure Active Directory

Kami menemukan Pendaftaran Aplikasi dan mengklik Pendaftaran Baru, ini akan membuat kepala layanan kami. Saya tidak akan membahas pengaturan apa yang akan saya pilih saat membuat, ini mungkin berbeda untuk langganan yang berbeda.

Sekarang kita perlu memberikan hak kepada direktur layanan kami. Untuk melakukan ini, buka ikon berlangganan dengan kunci. Pilih langganan kami.

Selanjutnya, di Kontrol Akses, klik Tugas Peran dan cari akun ini dalam pencarian dengan nama yang baru saja Anda buat. Kami memberi peran Kontributor, ini sudah cukup.

Selanjutnya, kembali ke Kepala Layanan kami di Azure AD dan buka propertinya. Nanti, kita akan membutuhkan semua ID yang ada di sana, kita simpan.
Di sinilah pengaturan portal kami berakhir dan kami pergi ke Azure DevOps.
2. Integrasi di sisi Azure DevOps
Pertama-tama, kita masuk ke pengaturan proyek dan pilih Sambungan Layanan. Buat elemen baru tipe Azure Resource Manager.

Sekarang kami membutuhkan semua ID yang kami rekam. Klik pada gunakan versi lengkap dari dialog koneksi layanan. Dan masukkan semua data yang kami terima dari Kepala Layanan. Klik verifikasi dan jika semuanya baik-baik saja, pertahankan koneksi. Sekarang jaringan pipa kami dapat menggunakannya untuk terhubung ke cloud.

3. Membuat saluran pipa
Sekarang kita lanjutkan ke yang paling menarik, yaitu pembangunan pipa itu sendiri. Buka menu Pipelines-Builds

Kami disambut oleh menu untuk membuat bangunan baru, yang secara default akan mencoba membuat file YAML untuk kami dengan konfigurasi yang sesuai. Kami dengan sopan menolak ini dan memilih versi klasik. Keinginan Microsoft untuk melakukan segala hal seperti orang-orang dan memberikan kesempatan untuk menyesuaikan pipa melalui YAML sebanyak mungkin, tetapi dokumentasi yang kurang dan hanya ketidakmampuan praktis dari banyak modul memberitahu kita bahwa terlalu dini untuk menggunakan fungsi ini.

Dari beragam templat, kami membutuhkan Saluran Kosong yang sederhana. Setelah dibuat, kita akan disambut oleh jendela pengeditan kosong, di dalamnya kita akan menghabiskan banyak waktu.

Jadi, klik + dan masuk ke toko modul tertentu, dari mana kita akan memerlukan komponen berikut dari daftar.

Sebelum kita melanjutkan dengan konfigurasi tugas pipeline, kita perlu membuat dan meletakkan beberapa file ke dalam proyek. Ini akan menjadi Templat ARM dari mesin virtual kami, yang akan kami hasilkan di Azure DevTest Labs, skrip untuk mendapatkan mesin IP setelah dibuat dan, jika diinginkan, skrip pengujian kami atau apa yang ingin kami jalankan di host.
4. Pembuatan Template ARM
Untuk membuat mesin virtual, pertama-tama kita perlu membuat template untuk itu, file json, yang kita masukkan ke dalam kode proyek sehingga dapat dibaca dari sana oleh pipeline.
Kami pergi ke lab kami dan menemukan menu Rumus (basis dapat digunakan kembali), klik untuk membuat yang baru.

Kami akan disambut oleh daftar panjang gambar sebagai basis, pilihan ukuran mesin, semua sama seperti saat membuat mesin virtual. Pada tahap ini, kami tidak akan berhenti, kami akan segera melanjutkan ke item terakhir dari properti mesin, yaitu artefak. Anda dapat menggunakan konfigurasi apa pun yang diperlukan untuk lingkungan Anda. Sebagai contoh, saya menambahkan mesin ke domain dan menambahkan akun layanan sebagai admin sehingga pipa kemudian dapat mengakses mesin ini di bawah akun ini. Ini semua dapat bervariasi, tetapi untuk pengujian kode yang berhasil, kita memerlukan satu artefak, yang akan kita bahas lebih detail. Untuk menempatkan versi terbaru dari perangkat lunak yang kami uji pada mesin kami, kami akan menggunakan Artefak Pipeline Unduh Azure dan artefak Run Script. Ingat di awal saya mengatakan bahwa di suatu tempat akan dibangun dengan installer aplikasi? Sekarang kita perlu memberi tahu mesin virtual, atau lebih tepatnya templat, sehingga ia pergi dan mengambil artefak ini. Dan saya tidak hanya mengambilnya, tetapi juga mengaturnya, untuk itu kami mengisi kolom khusus yang menunjukkan proyek, nama bangunan dan kunci rahasia. Kunci rahasia, seperti dalam semua sistem semacam ini, dihasilkan dalam akun, dalam hal ini di Azure DevOps dan disimpan dalam Rahasia di lab Anda. Ada peringatan kecil, di Rahasia kami akan menyimpannya, tetapi tidak dingin atau panas, itu akan diluncurkan dari pengguna lain sebagai bagian dari pipa, oleh karena itu kami perlu memasukkan kunci rahasia ke dalam templat secara manual lagi.
Artefak lain yang harus dimasukkan adalah "Konfigurasi WinRM", kita akan membutuhkannya untuk akses selanjutnya ke mesin. Hanya ada satu parameter, nama host. Karena kita tidak mengetahuinya terlebih dahulu, kita akan menggunakan variabel% COMPUTERNAME%.

Jadi kami telah menambahkan semua artefak yang diperlukan, kami akan beralih ke mengapa kami datang ke sini sama sekali. Kami mendapatkan Templat ARM yang dihasilkan di tab Lanjut dari jendela pembuatan rumus yang sama.

Salin konten halaman ke file VMtemplate.json dan letakkan di root proyek. Kami tidak membutuhkan cloud lagi, kami kembali ke saluran pipa.
5. Konfigurasi pipa
Mari kita mulai dengan yang paling penting dan menarik, menciptakan mesin virtual, untuk itu kami melakukan semua integrasi dan template ini. Di Berlangganan Azure RM, kami memilih koneksi Layanan kami, yang kami konfigurasikan di langkah 2. Selanjutnya, lingkungan lab yang tersedia akan muncul. Kemudian kita pilih json yang kita hasilkan dan kita mendefinisikan beberapa variabel wajib. Nama pengguna dan kata sandi mobil dapat diatur baik secara langsung atau dengan variabel, tetapi saya tidak yakin sama sekali bahwa itu berfungsi, apa pun yang saya tulis di sana, saya tidak bisa masuk ke mobil di bawah kredit ini, yang utama adalah mengatur nama mobil sehingga selalu mungkin unik Untuk ini, saya menggunakan variabel build environment.

Selanjutnya, kami menyiapkan poin penting lainnya. Setelah mobil lepas landas, kita juga perlu mengetahui parameternya, dan lebih baik tidak ke kita tetapi ke payline. Untuk melakukan ini, kita membuat skrip, misalnya GetLabVMParams.ps1 dan meletakkannya di sana, dalam proyek. Saya mengambil teks skrip di situs web Microsoft, tetapi sedikit memperbaikinya untuk lingkungan saya, karena dia mengambil mesin PublicIP dan FQDN. Saya tidak punya keduanya, tetapi ada PrivateIP yang tidak begitu mudah didapat, jadi saya menambahkannya.
Param( [string] $labVmId) $labVmComputeId = (Get-AzureRmResource -Id $labVmId).Properties.ComputeId # Get lab VM resource group name $labVmRgName = (Get-AzureRmResource -Id $labVmComputeId).ResourceGroupName # Get the lab VM Name $labVmName = (Get-AzureRmResource -Id $labVmId).Name # Get lab VM public IP address # $labVMIpAddress = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).IpAddress # Get lab VM FQDN # $labVMFqdn = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).DnsSettings.Fqdn # Get lab VM private IP address $VmNetworkdetails= (((Get-AzureRmVM -ResourceGroupName $labVmRgName -Name $labVmName).NetworkProfile).NetworkInterfaces).Id $nicname = $VmNetworkdetails.substring($VmNetworkdetails.LastIndexOf("/")+1) $labVMnetwork = (Get-AzureRmNetworkInterface -Name $nicname -ResourceGroupName $labVmRgName)|Select-Object -ExpandProperty IPConfigurations $labVMIpAddress = $labVMnetwork.PrivateIpAddress # Set a variable labVmRgName to store the lab VM resource group name Write-Host "##vso[task.setvariable variable=labVmRgName;]$labVmRgName" # Set a variable labVMIpAddress to store the lab VM Ip address Write-Host "##vso[task.setvariable variable=labVMIpAddress;]$labVMIpAddress" # Set a variable labVMFqdn to store the lab VM FQDN name Write-Host "##vso[task.setvariable variable=labVMFqdn;]$labVMFqdn" Write-Output $labVMIpAddress Set-Item wsman:\localhost\client\trustedhosts * -Force
Dari semua yang dibaca skrip, kita hanya perlu variabel labVMIpAddress. Nah, ini untuk saya, mungkin Anda perlu sesuatu yang lain, untuk ini saya tidak menghapus apa pun dan hanya berkomentar kelebihannya.
Saya juga akan menjelaskan baris terakhir dari skrip, memungkinkan akses mesin build kami ke host apa pun melalui WinRM.
Langkah selanjutnya, kami menjalankan skrip indah kami. Dia akan membutuhkan koneksi yang sama ke cloud, variabel input dengan ID mesin, yang pada saat itu sudah akan diketahui dari langkah sebelumnya. Bagaimana? Di sini perlu disebutkan hal yang luar biasa sebagai Variabel Keluaran. Setiap langkah dapat memiliki daftar variabel yang diteruskan ke langkah-langkah pipa berikutnya. Dengan demikian, untuk skrip super kami, variabel seperti itu adalah labVMIpAddress, jangan lupa untuk menunjukkan ini.

Selanjutnya, saya melakukan hal-hal yang cukup sederhana, yang, di samping itu, dapat bervariasi dari kasus ke kasus. Saya menjalankan skrip jarak jauh dengan penciptaan bola, di mana saya kemudian akan mengunggah skrip saya.
New-Item “C:\test" –type directory New-SMBShare –Name “test” –Path “C:\test” –FullAccess everyone
Dari nama kubis jelas bahwa kemudian kita menyalin beberapa skrip sampel ke mesin dan menjalankannya dalam satu langkah lagi. Sebagai alamat mesin jarak jauh, variabel kami $ (labVMIpAddress) berguna bagi kami. Selanjutnya, kami menggunakan tugas "mengambil artefak dari bola" dan menyalin hasil skrip ke lingkungan build kami, lalu kami menyimpan file-file ini di build artefact dengan tugas standar yang sama. Setelah kita tidak lagi membutuhkan mobil, kita bunuh dengan langkah terakhir. Kesulitan utama, seperti dapat dilihat dalam volume artikel, adalah untuk berintegrasi dengan cloud dan menjalin kontak dengan mesin virtual yang Anda buat, maka Anda sudah bisa bersenang-senang sebanyak yang Anda butuhkan.
Ini adalah artikel pertama saya, jadi jangan menilai dengan ketat, komentar dipersilahkan.